「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」
含义: 定义一个解释器,这个解释器使用该标识来解释语言中的句子。
1.创建一个解释器的接口
public interface Expression {
public boolean interpret(String context);
}
复制代码
2.创建实体类
public class MExpression implements Expression {
private String state;
public MExpression(String state){
this.state = state;
}
@Override
public boolean interpret(String context) {
if(context.contains(state)){
return true;
}
return false;
}
}
public class Or implements Expression {
private Expression expression1 = null;
private Expression expression2 = null;
public Or(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 And implements Expression {
private Expression expression1 = null;
private Expression expression2 = null;
public And(Expression expression1, Expression expression2) {
this.expression1 = expression1;
this.expression2 = expression2;
}
@Override
public boolean interpret(String context) {
return expression1.interpret(context) && expression2.interpret(context);
}
}
复制代码
3.测试
public class Test {
public static Expression getCoffee(){
Expression americano = new MExpression("Americano");
Expression latte = new MExpression("Latte");
return new Or(americano, latte);
}
public static Expression getTea(){
Expression longjing = new TerminalExpression("Longjing");
Expression liuanLeaf = new TerminalExpression("Liuan Leaf");
return new And(longjing, liuanLeaf);
}
public static void main(String[] args) {
Expression isCoffee = getCoffee();
Expression isTea = getTea();
isCoffee.interpret("Longjing");
isTea.interpret("Longjing");
}
}
复制代码
优点: 1、拥有较好的扩展性; 2、代码实现简单。
缺点: 1、大部分场景不适用于这个模式; 2、会产生较多的实体类,代码臃肿; 3、解释器模式代码理解比较复杂。
使用场景: 出现需要解释的场景,大部分多不需要。
使用实例: 编译器、运算表达式计算、正则表达式、机器人
注意事项: 1、Java中如果出现能够利用解释器模式的场景,可以使用expression4J 代替;2、不要在重复的地方使用和解释器模式,不然不利于维护。
解释器模式的内容比较少,下面来说一说设计模式的六大原则以及设计模式的23种名称。
设计模式的六大原则:开闭原则(Open Close Principle);里氏代换原则(Liskov Substitution Principle);依赖倒转原则(Dependence Inversion Principle);接口隔离原则(Interface Segregation Principle);迪米特法则,又称最少知道原则(Demeter Principle);合成复用原则(Composite Reuse Principle)
23种设计模式:
类型 | 模式 |
---|---|
创建型模式 | 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) |
结构型模式 | 适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria Pattern) 组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) |
行为型模式 | 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) |
J2EE 模式 | MVC 模式(MVC Pattern) 业务代表模式(Business Delegate Pattern) 组合实体模式(Composite Entity Pattern) 数据访问对象模式(Data Access Object Pattern) 前端控制器模式(Front Controller Pattern) 拦截过滤器模式(Intercepting Filter Pattern) 服务定位器模式(Service Locator Pattern) 传输对象模式(Transfer Object Pattern) |
这就是所有的。