給定乙個語言,定義它的文法的一種表示,並定義一種直譯器,這個直譯器使用該表示來解釋語言中的句 子。
在軟體構建過程中,如果某一特定領域的問題比較複雜,類似的模式不斷重複出現,如果使用普通的程式設計方式來實現將面臨非常頻繁的變化。在這種情況下,將特定領域的問題表達為某種語法規則下的句子,然後構建乙個直譯器來解釋這樣的句子,從而達到解決問題的目的。
下面看下直譯器模式的結構圖
基本**:
/// ///接下來看乙個實際的應用,功能是數字的轉換,如將「五百二十」轉換成「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
<
expression
> list =
new
list
<
expression
>();
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 編寫乙個方法,接收表示式的形式,然後根據使用者輸入的數值進行解析,得到結果...
設計模式 行為型模式 直譯器模式
給分析物件定義乙個語言,並定義該語言的文法表示,再設計乙個直譯器來解釋語言中的句子。該模式實現了文法表示式處理的介面,該介面解釋乙個特定的上下文。優點擴充套件性好。由於在直譯器模式中使用類來表示語言的文法規則,因此可以通過繼承等機制來改變或擴充套件文法 容易實現。在語法樹中的每個表示式節點類都是類似...