設計模式筆記 16 直譯器模式(行為型)

2021-05-21 13:42:01 字數 2626 閱讀 4494

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

子。在軟體構建過程中,如果某一特定領域的問題比較複雜,類似的模式不斷重複出現,如果使用普通的程式設計方式來實現將面臨非常頻繁的變化。在這種情況下,將特定領域的問題表達為某種語法規則下的句子,然後構建乙個直譯器來解釋這樣的句子,從而達到解決問題的目的。

下面看下直譯器模式的結構圖

基本**:

/// /// 

上下文資訊

///

public class

context

}/// ///

抽象表示式,宣告乙個抽象的解釋操作

///

public abstract class

abstractexpression

public class

terminalexpression:abstractexpression

}public class

nonterminalexpression : abstractexpression

}public class

console.writeline(context.data);

}}

接下來看乙個實際的應用,功能是數字的轉換,如將「五百二十」轉換成「520「,首先建立乙個context類用來儲存上下文資訊,類中有兩個屬性statement和data,分別用來存放漢字的數字和阿拉伯數字。

public class 

context

public int data

}

抽象的expression類

/// /// 

抽象表示式類

///

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 編寫乙個方法,接收表示式的形式,然後根據使用者輸入的數值進行解析,得到結果...

設計模式 行為型模式 直譯器模式

給分析物件定義乙個語言,並定義該語言的文法表示,再設計乙個直譯器來解釋語言中的句子。該模式實現了文法表示式處理的介面,該介面解釋乙個特定的上下文。優點擴充套件性好。由於在直譯器模式中使用類來表示語言的文法規則,因此可以通過繼承等機制來改變或擴充套件文法 容易實現。在語法樹中的每個表示式節點類都是類似...