給定乙個語言,定義它的文法的一種表示,並定義一種直譯器,這個直譯器使用該表示來解釋語言中的句
子。在軟體構建過程中,如果某一特定領域的問題比較複雜,類似的模式不斷重複出現,如果使用普通的程式設計方式來實現將面臨非常頻繁的變化。在這種情況下,將特定領域的問題表達為某種語法規則下的句子,然後構建乙個直譯器來解釋這樣的句子,從而達到解決問題的目的。
下面看下直譯器模式的結構圖
基本**:
/// ///接下來看乙個實際的應用,功能是數字的轉換,如將「五百二十」轉換成「520「,首先建立乙個context類用來儲存上下文資訊,類中有兩個屬性statement和data,分別用來存放漢字的數字和阿拉伯數字。上下文資訊
///
public class
context
}/// ///
抽象表示式,宣告乙個抽象的解釋操作
///
public abstract class
abstractexpression
public class
terminalexpression:abstractexpression
}public class
nonterminalexpression : abstractexpression
}public class
console.writeline(context.data);
}}
public class抽象的expression類context
public int data
}
/// ///個十百千萬的表示式類抽象表示式類
///
public abstract class
expression
public virtual void interpret(context context)
foreach (string key in table.keys)
if (context.statement.endswith("零"))}}
public abstract string getpostfix();
public abstract int multiplier();
public virtual int getlength()
}
public class客戶端呼叫geexpression : expression
public override int multiplier()
public override int getlength()
}public class
shiexpression : expression
public override int multiplier()
}public class
baiexpression : expression
public override int multiplier()
}public class
qianexpression : expression
public override int multiplier()
}public class
wanexpression : expression
public override int multiplier()
}
class執行結果program
; list
list = new
list
();list.add(new
geexpression());
list.add(new
shiexpression());
list.add(new
baiexpression());
list.add(new
qianexpression());
list.add(new
wanexpression());
foreach (expression exp in list)
console.writeline("=", num, context.data);
}}
設計模式筆記 16 直譯器模式(行為型)
給定乙個語言,定義它的文法的一種表示,並定義一種直譯器,這個直譯器使用該表示來解釋語言中的句 子。在軟體構建過程中,如果某一特定領域的問題比較複雜,類似的模式不斷重複出現,如果使用普通的程式設計方式來實現將面臨非常頻繁的變化。在這種情況下,將特定領域的問題表達為某種語法規則下的句子,然後構建乙個直譯...
設計模式 行為型模式 直譯器模式
四則運算問題 通過直譯器模式來實現四則運算,如計算a b c的值,具體要求 1 先輸入表示式的形式,比如 a b c d e,要求表示式的字母不能重複 2 在分別輸入a b,c,d,e 的值 傳統方案解決四則運算問題分析 1 編寫乙個方法,接收表示式的形式,然後根據使用者輸入的數值進行解析,得到結果...
設計模式 行為型模式 直譯器模式
給分析物件定義乙個語言,並定義該語言的文法表示,再設計乙個直譯器來解釋語言中的句子。該模式實現了文法表示式處理的介面,該介面解釋乙個特定的上下文。優點擴充套件性好。由於在直譯器模式中使用類來表示語言的文法規則,因此可以通過繼承等機制來改變或擴充套件文法 容易實現。在語法樹中的每個表示式節點類都是類似...