解释器模式(行为模式)
生活随笔
收集整理的這篇文章主要介紹了
解释器模式(行为模式)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
???????????? 設計模式之Interpreter - 解釋器模式???????????? 2008-06-24 10:41:46??????????
分類: 項目管理
?源地址:http://blog.chinaunix.net/uid-20384806-id-1954236.html
Interpreter模式也叫解釋器模式,是由GoF提出的23種設計模式中的一種。Interpreter是行為模式之一,它是一種特殊的設計模式,它建立一個解釋器,對于特定的計算機程序設計語言,用來解釋預先定義的文法。
本文介紹設計模式中的解釋器(Interpreter)模式的概念,用法,以及實際應用中怎么樣使用Interpreter模式進行開發。 Interpreter模式的概念 Interpreter是一種特殊的設計模式,它建立一個解釋器,對于特定的計算機程序設計語言,用來解釋預先定義的文法。簡單地說,Interpreter模式是一種簡單的語法解釋器構架。Interpreter模式有很多種實現方法,下面我們給出Interpreter模式的一種類圖來說明Interpreter模式: 在上圖中,我們假設需要在Client中解釋某文法,Client調用Context來存儲文法規則,并調用解釋器AbstractionExpression類樹來對該文法加以解釋。注意,上圖只是Interpreter模式的一種實現方式的類圖。
Context ????解釋器上下文環境類。用來存儲解釋器的上下文環境,比如需要解釋的文法等。 AbstractExpression ????解釋器抽象類。 ConcreteExpression ????解釋器具體實現類。 Interpreter模式的實現范例 為了幫助大家理解Interpreter模式的基本概念,我們在這里只舉一個最簡單的例子。 讓一個表達式a經過PlusExpression解釋器處理后使該表達式+1,經過MinusExpression解釋器處理后使該表達式-1。
代碼: import java.util.ArrayList; import java.util.List;
public class Client { ????public static void main(String []args) { ????????String inputExpr = "10"; ???????? ????????Context context = new Context(inputExpr); ???????? ????????List list = new ArrayList();
????????list.add(new PlusExpression()); ????????list.add(new PlusExpression()); ????????list.add(new MinusExpression()); ????????list.add(new MinusExpression()); ????????list.add(new MinusExpression());
????????for (int i=0;i<list.size();i++) { ??????????AbstractExpression expression = (AbstractExpression)list.get(i); ??????????expression.interpret(context); ????????} ???????? ????????System.out.println(context.getOutput()); ????} }
/** * Context * */ class Context { ????private String input; ????private int output;
????public Context (String input) { ????????this. input = input; ????}
????public String getInput() { ????????return input; ????}
????public void setInput(String input) { ????????this.input = input; ????}
????public int getOutput() { ????????return output; ????}
????public void setOutput(int output) { ????????this.output = output; ????} }
/** * Expression & subclass * */ abstract class AbstractExpression { ????public abstract void interpret(Context context); }
class PlusExpression extends AbstractExpression { ????public void interpret(Context context) { ????????System.out.println("PlusExpression ++"); ????????String input = context.getInput(); ????????int parsedResult = Integer.parseInt(input); ????????parsedResult ++; ????????context.setInput(String.valueOf(parsedResult)); ????????context.setOutput(parsedResult); ????} }
class MinusExpression extends AbstractExpression { ????public void interpret(Context context) { ????????System.out.println("PlusExpression --"); ????????String input = context.getInput(); ????????int parsedResult = Integer.parseInt(input); ????????parsedResult --; ????????context.setInput(String.valueOf(parsedResult)); ????????context.setOutput(parsedResult); ????} } 運行并顯示Client: C:\Interpreter>javac *.java C:\Interpreter>java Client PlusExpression ++ PlusExpression ++ PlusExpression -- PlusExpression -- PlusExpression -- 9 C:\Interpreter>
轉載于:https://www.cnblogs.com/kexb/p/3673533.html
總結
以上是生活随笔為你收集整理的解释器模式(行为模式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html-javascript前端页面刷
- 下一篇: postgresql 外部表简单测试