解释器模式
解释器属于行为型模式
定义:给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子
模式类图
角色:
- 抽象解释器:
AbstractExpression
定义解释器规则 - 具体解释器:
TerminalExpression
和NonterminalExpression
解释器规则具体实现
优点
易扩展,增加新的解释器规则是只需要增加一个具体解释器就好
缺点
解释器规则太多时,会导致类膨胀
模式代码实现
源码地址: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种设计模式详解