设计模式-解释器模式
UML类图
使用场景
命令行的解析和执行,歌谱解析,翻译软件等等。
代码实现
该类用来存放一些全局信息
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 void interpret(Context context){
System.out.println("解析context");
excute();
}
public abstract void excute();
}
具体执行动作的类
public class TerminalExpression extends AbstractExpression {
@Override
public void excute() {
System.out.println("执行终极指令动作");
}
}
具体执行动作的类
public class ConcreteExpression1 extends AbstractExpression {
@Override
public void excute() {
System.out.println("执行某个具体动作--1");
}
}
具体执行动作的类
public class ConcreteExpression2 extends AbstractExpression{
@Override
public void excute() {
System.out.println("执行某个具体动作--2");
}
}
public class Main {
public static void main(String[] args) {
Context context = new Context();
//读取某个命令,并存放到context中
context.setInput("a");
//生成解释器
AbstractExpression expression1 = new ConcreteExpression1();
AbstractExpression expression2 = new ConcreteExpression2();
AbstractExpression expression3 = new TerminalExpression();
//这里可以使用状态模式或者责任链模式
expression1.interpret(context);
expression2.interpret(context);
expression3.interpret(context);
}
}
我们可以发现,在该模式中也有模版模式的出现。