1 解释器模式
2 实现代码
interface Expression{
public boolean interpret(String context);
}
class TerminalExpression implements Expression{
private String data;
public TerminalExpression(String data){
this.data = data;
}
@Override
public boolean interpret(String context) {
if (context.contains(data)){
return true;
}
return false;
}
}
class OrExpression implements Expression{
private Expression expression1;
private Expression expression2;
public OrExpression(Expression expression1, Expression expression2){
this.expression1 = expression1;
this.expression2 = expression2;
}
@Override
public boolean interpret(String context) {
return expression1.interpret(context) || expression2.interpret(context);
}
}
class AndExpression implements Expression{
private Expression expression1;
private Expression expression2;
public AndExpression(Expression expression1, Expression expression2){
this.expression1 = expression1;
this.expression2 = expression2;
}
@Override
public boolean interpret(String context) {
return expression1.interpret(context) && expression2.interpret(context);
}
}
public class Test {
public static Expression getMaleExpression(){
Expression expression1 = new TerminalExpression("male1");
Expression expression2 = new TerminalExpression("male2");
return new OrExpression(expression1, expression2);
}
public static Expression getFemaleExpression(){
Expression expression1 = new TerminalExpression("female1");
Expression expression2 = new TerminalExpression("female2");
return new AndExpression(expression1, expression2);
}
public static void main(String[] args){
Expression expression1 = getMaleExpression();
Expression expression2 = getFemaleExpression();
System.out.println(expression1.interpret("male1"));
System.out.println(expression2.interpret("female1 female2"));
}
}