一、核心作用:
給定一個語言,定義他的文本表示方式,定義一個解釋器,解釋器使用表示解釋語言的句子
二、常見應用場景:
1、正則表達式
2、運算符表達式
三、解釋器模式的實現:
環境角色(Context):包含解釋器之外的全局信息
抽象表達式(AbstractExpression):聲明抽象解釋操作
真實表達式(ContreteExpression):實現抽象表達式的操作
四、代碼示例:
一、環境角色:
package com.hezeu.Interpreter;
/**
* @Classname Context
* @Description 環境角色
* @Date 2020/2/26 下午 05:52
* @Created by 朱進博 [email protected]
*/
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;
}
}
#####二、抽象表達式:
package com.hezeu.Interpreter;
/**
* @Classname AbstractExpression
* @Description 具體命令類
* @Date 2020/2/26 下午 05:53
* @Created by 朱進博 [email protected]
*/
public abstract class AbstractExpression {
public abstract void Interpret(Context context);
}
三、具體抽象類:
package com.hezeu.command;
/**
* @Classname Invoke
* @Description 調用者
* @Date 2020/2/26 下午 01:19
* @Created by 朱進博 [email protected]
*/
public class Invoke {
private Command command;
public Invoke(Command command) {
this.command = command;
}
public void call(){
command.execute();
}
}
四、Receiver接收者類類
package com.hezeu.iterator;
import java.util.ArrayList;
import java.util.List;
/**
* @Classname ConcreteAggregate
* @Description TODO
* @Date 2020/2/25 下午 07:34
* @Created by 朱進博 [email protected]
*/
public class ConcreteAggregate implements Aggregate{
private List<Object> list = new ArrayList<>();
public void addObject(Object obj) {
this.list.add(obj);
}
public void removeObject(Object obj) {
this.list.remove(obj);
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
public MyInteger createIterator() {
return new ConcreteIterator(list);
}
}
五、解釋器模式的優缺點:
優點: 有較強的擴展性
缺點: 解釋器模式會引起類膨脹 解釋器模式採用遞歸調用方法,將導致調試複雜 效率低