简单梳理解释器模式
解释器模式的实现
首先我们定义个Context类,用来保存一些解释器之外的全局信息
//包含解释器之外的一些全局信息
public class Context {
private String input;
private String output;
public String getInput() {
return input;
}
public void setInput(String input) {
this.input = input;
}
public String getOutput() {
return output;
}
public void setOutput(String output) {
this.output = output;
}
}
再定义一个抽象表达式的基类
//抽象表达式
public abstract class AbstractExpression {
public abstract void Interpret(Context context);
}
定义两个具体实现类
public class TerminalExpression extends AbstractExpression{
@Override
public void Interpret(Context context) {
System.out.println("终端解释器");
}
}
public class NonterminalExpression extends AbstractExpression{
@Override
public void Interpret(Context context) {
System.out.println("非终端解释器");
}
}
这样我们前期的定义就算做完了,
然后我们看具体应用中的使用。
定义业务方法
看在具体业务逻辑中如何使用
public class InterpreterTest {
public static void main(String[] args) {
//解释器模式
func1();
}
public static void func1(){
Context context = new Context();
List<AbstractExpression> list = new ArrayList<>();
list.add(new TerminalExpression());
list.add(new NonterminalExpression());
list.add(new TerminalExpression());
list.add(new TerminalExpression());
for(AbstractExpression ae: list){
ae.Interpret(context);
}
}
}
执行结果
终端解释器
非终端解释器
终端解释器
终端解释器
结果分析
解释器模式,给定一个语言,定义它文法的一种表示,并定义一个解释器,
这个解释器使用该表示来解释语言中的句子。
解释器模式的优点:可以很容易的改变和扩展文法。
因为该模式使用类来表示文法规则,可以使用继承来改变和扩展文法规则。
当然,解释器模式也有不足之处,因为每一个文法规则至少需要定义一个类,
因此包含许多规则的文法可能会难以维护。
联系作者
微信公众号
xiaomingxiaola
(BossLiu)
QQ群
58726094
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 384276224@qq.com