解釋器模式
<設計模式其實很簡單>筆記
給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
//抽象表達式
public abstract class AbstractExpression{
//抽象解釋方法
public abstract void Interpret(Context context);
}
//終端解釋器,實現與文法中終結符相關聯的解釋操作
public class TerminalExpression extends AbstractExpression{
//覆蓋解釋操作方法
@Override
//解釋方法
public void Interpret(Context context){
System.out.println(context.getInputString());
System.out.println("終端解釋器");
}
}
//非終端解釋器,作用與終端解釋器相反
public class NonterminalExpression extends AbstractExpression{
//覆蓋解釋操作方法
@Override
//解釋方法
public void Interpret(Context context){
System.out.println(context.getInputString());
System.out.println("非終端解釋器");
}
}
//信息包, 包含所有信息,但不包含解釋器
public class Context{
private String inputString;
private String outputString;
//設定輸入文本
public void setInputString(String inputstring){
this.inputstring = inputstring;
}
//獲取輸入文本
public String getInputString(String inputstring){
return inputstring;
}
//設定輸出文本
public void setOutputString(String outputstring){
this.outputstring = outputstring;
}
//獲取輸出文本
public String getoutputString(String outputstring){
return outputstring;
}
}
//客戶端
public static void main(String[] args){
Context context = new Context();
context.setInputString("輸入的文字");
List<AbstractExpression> list = new ArrayList<AbstractExpression>();
list.add(new TerminalExpression());
list.add(new NonterminalExpression());
list.add(new TerminalExpression());
for(int i = 0 ; i<list.size() ; i++){
(list.get(i)).Interpret(context);
}
}
③適用的地方:
如果在系統中某一特定類型的問題發生頻率很高,此時可以考慮將這些問題的實例表述爲一個語言中的句子,因此可以構建一個解釋器,此解釋器通過解釋這些句子來解釋這些問題
解釋器模式描述瞭如何構成一個比較簡單的語言解釋器,主要是會應用在使用面嚮對象語言開發的編譯器中