Skip to content

Instantly share code, notes, and snippets.

@AutMaple
Last active July 8, 2023 03:59
Show Gist options
  • Select an option

  • Save AutMaple/11c6e01f6eb06e6800e1194352d6e07a to your computer and use it in GitHub Desktop.

Select an option

Save AutMaple/11c6e01f6eb06e6800e1194352d6e07a to your computer and use it in GitHub Desktop.
[规格模式] #设计模式#
@RequiredArgsConstructor
public class AndExpression extends CompositeExpression {
private final Expression left;
private final Expression right;
@Override
public boolean compute(Map<String, Double> data) {
return left.compute(data) && right.compute(data);
}
}
public abstract class CompositeExpression implements Expression {
@Override
public Expression and(Expression a) {
return new AndExpression(this, a);
}
@Override
public Expression or(Expression a) {
return new OrExpression(this, a);
}
@Override
public Expression not(Expression a) {
return new NotExpression(a);
}
}
@RequiredArgsConstructor
public class EqualExpression extends CompositeExpression {
private final String indicatorName;
private final double presetValue;
@Override
public boolean compute(Map<String, Double> data) {
Double value = data.get(indicatorName);
if (value == null)
return true;
return this.presetValue == value;
}
}
public interface Expression {
boolean compute(Map<String, Double> value);
Expression and(Expression a);
Expression or(Expression a);
Expression not(Expression a);
}
@RequiredArgsConstructor
public class NotExpression extends CompositeExpression {
private final Expression expression;
@Override
public boolean compute(Map<String, Double> data) {
return !expression.compute(data);
}
}
@RequiredArgsConstructor
public class OrExpression extends CompositeExpression {
private final Expression left;
private final Expression right;
@Override
public boolean compute(Map<String, Double> data) {
return left.compute(data) || right.compute(data);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment