24解釋器模式

解釋器模式

<設計模式其實很簡單>筆記


①定義:

給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。


②代碼:
//抽象表達式
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);
	}
}


③適用的地方:
如果在系統中某一特定類型的問題發生頻率很高,此時可以考慮將這些問題的實例表述爲一個語言中的句子,因此可以構建一個解釋器,此解釋器通過解釋這些句子來解釋這些問題
解釋器模式描述瞭如何構成一個比較簡單的語言解釋器,主要是會應用在使用面嚮對象語言開發的編譯器中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章