解释器模式(行为模式)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                解释器模式(行为模式)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                ???????????? 設(shè)計(jì)模式之Interpreter - 解釋器模式???????????? 2008-06-24 10:41:46??????????
分類: 項(xiàng)目管理
?源地址:http://blog.chinaunix.net/uid-20384806-id-1954236.html
Interpreter模式也叫解釋器模式,是由GoF提出的23種設(shè)計(jì)模式中的一種。Interpreter是行為模式之一,它是一種特殊的設(shè)計(jì)模式,它建立一個(gè)解釋器,對(duì)于特定的計(jì)算機(jī)程序設(shè)計(jì)語言,用來解釋預(yù)先定義的文法。
本文介紹設(shè)計(jì)模式中的解釋器(Interpreter)模式的概念,用法,以及實(shí)際應(yīng)用中怎么樣使用Interpreter模式進(jìn)行開發(fā)。 Interpreter模式的概念 Interpreter是一種特殊的設(shè)計(jì)模式,它建立一個(gè)解釋器,對(duì)于特定的計(jì)算機(jī)程序設(shè)計(jì)語言,用來解釋預(yù)先定義的文法。簡單地說,Interpreter模式是一種簡單的語法解釋器構(gòu)架。Interpreter模式有很多種實(shí)現(xiàn)方法,下面我們給出Interpreter模式的一種類圖來說明Interpreter模式: 在上圖中,我們假設(shè)需要在Client中解釋某文法,Client調(diào)用Context來存儲(chǔ)文法規(guī)則,并調(diào)用解釋器AbstractionExpression類樹來對(duì)該文法加以解釋。注意,上圖只是Interpreter模式的一種實(shí)現(xiàn)方式的類圖。
Context ????解釋器上下文環(huán)境類。用來存儲(chǔ)解釋器的上下文環(huán)境,比如需要解釋的文法等。 AbstractExpression ????解釋器抽象類。 ConcreteExpression ????解釋器具體實(shí)現(xiàn)類。 Interpreter模式的實(shí)現(xiàn)范例 為了幫助大家理解Interpreter模式的基本概念,我們?cè)谶@里只舉一個(gè)最簡單的例子。 讓一個(gè)表達(dá)式a經(jīng)過PlusExpression解釋器處理后使該表達(dá)式+1,經(jīng)過MinusExpression解釋器處理后使該表達(dá)式-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); ????} } 運(yùn)行并顯示Client: C:\Interpreter>javac *.java C:\Interpreter>java Client PlusExpression ++ PlusExpression ++ PlusExpression -- PlusExpression -- PlusExpression -- 9 C:\Interpreter>
轉(zhuǎn)載于:https://www.cnblogs.com/kexb/p/3673533.html
總結(jié)
以上是生活随笔為你收集整理的解释器模式(行为模式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: html-javascript前端页面刷
- 下一篇: 在Ubuntu中搭建.NET开发环境
