解释器模式

解释器属于行为型模式

定义:给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子

模式类图

角色:

  1. 抽象解释器: AbstractExpression 定义解释器规则
  2. 具体解释器:TerminalExpressionNonterminalExpression解释器规则具体实现

优点

易扩展,增加新的解释器规则是只需要增加一个具体解释器就好

缺点

解释器规则太多时,会导致类膨胀

模式代码实现

源码地址:https://github.com/mingyuHub/design-patterns

以验证输入的链接是否已http开头为例

抽象解释器
/**
 * @author: chenmingyu
 * @date: 2019/3/31 15:00
 * @description: 抽象解释器
 */
public interface Expression {

    /**
     * 定义解释器规则
     * @param context
     * @return
     */
    boolean interpret(String context);
}
具体解释器
/**
 * @author: chenmingyu
 * @date: 2019/3/31 15:03
 * @description:
 */
public class TerminalExpression implements Expression{

    private String data;

    public TerminalExpression(String data) {
        this.data = data;
    }

    @Override
    public boolean interpret(String context) {
        if(context.startsWith(data)){
            return true;
        }
        return false;
    }
}
验证
public static void main(String[] args) {
    Expression expression = new TerminalExpression("http");
    System.out.println("http://chenmingyu.top 是以http开头:"+expression.interpret("http://chenmingyu.top"));
    System.out.println("www.chenmingyu.top 是以http开头:"+expression.interpret("www.chenmingyu.top"));
}

输出

http://chenmingyu.top 是以http开头:true
www.chenmingyu.top 是以http开头:false

参考:设计模式之禅:https://www.kancloud.cn/sstd521/design/193610

推荐阅读:23种设计模式详解