解釋器模式(Interpreter)Java
來源:程序員人生 發(fā)布時間:2016-06-24 08:52:06 閱讀次數(shù):2808次
定義:
解釋器模式(interpreter):給定1個語言,定義它的文法的1種表示,并定義1個解釋器,這個解釋器使用該表示來解釋語言中的句子。
結(jié)構(gòu)圖:

AbstractExpression解釋器模式抽象類
package ding.study.designpatterns.interpreter;
/**
* 解釋器模式抽象類
* - 聲明1個抽象的Interpret方法,抽象語法樹中所有的節(jié)點都必須實現(xiàn)該抽象方法。
* @author daniel
*
*/
abstract class AbstractExpression {
//解釋方法
public abstract void interpret(Context context);
}
Context解釋器以外的1些全局信息
package ding.study.designpatterns.interpreter;
/**
* 解釋器以外的1些全局信息
* Interpreter方法所需要的信息的容器,該信息對Interpreter而言全局可見。充當(dāng)幾個AbstractExpresssion
* 實例之間的通訊頻道。
*
* @author daniel
*
*/
public class Context {
private String input;
private String output;
/**
* @return the output
*/
public String getOutput() {
return output;
}
/**
* @param output
* the output to set
*/
public void setOutput(String output) {
this.output = output;
}
/**
* @return the input
*/
public String getInput() {
return input;
}
/**
* @param input
* the input to set
*/
public void setInput(String input) {
this.input = input;
}
}
NonterminalExpression非終端解釋器
package ding.study.designpatterns.interpreter;
/**
* 非終端解釋器 另外1個實現(xiàn)了AbstractExpression
* 接口的類,用來處理語法樹中非末端節(jié)點的語法。它含有下1個AbstractExpression(s)的援用,調(diào)用它每一個子節(jié)點的Interpret方法。
*
* @author daniel
*
*/
public class NonterminalExpression extends AbstractExpression {
@Override
public void interpret(Context context) {
System.out.println("非終端解釋器");
}
}
TerminalExpression終端解釋器
package ding.study.designpatterns.interpreter;
/**
* 終端解釋器
* - 實現(xiàn)和語法中末端符號相干的Interpret方法。
- 在每一個句子的末端符號中均需要1個TerminalExpression實例。
* @author daniel
*
*/
public class TerminalExpression extends AbstractExpression {
@Override
public void interpret(Context context) {
System.out.println("終端解釋器");
}
}
Client 客戶端 ZTestMain
package ding.study.designpatterns.interpreter;
import java.util.ArrayList;
import java.util.List;
/**
* 解釋器模式(interpreter):給定1個語言,定義它的文法的1種表示,并定義1個解釋器,這個解釋器使用該表示來解釋語言中的句子。
*
* 輸出:
* 終端解釋器
非終端解釋器
終端解釋器
終端解釋器
*
* @author daniel
* @email 576699909@qq.com
* @time 2016⑸⑶1 下午2:16:37
*/
public class ZTestMain {
/**
* @param args
*/
public static void main(String[] args) {
Context context = new Context();
List<AbstractExpression> list = new ArrayList<AbstractExpression>();
list.add(new TerminalExpression());
list.add(new NonterminalExpression());
list.add(new TerminalExpression());
list.add(new TerminalExpression());
for (AbstractExpression exp : list) {
exp.interpret(context);
}
}
}
履行結(jié)果

源代碼
https://github.com/dingsai88/StudyTest/tree/master/src/ding/study/designpatterns/interpreter
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈