PHP設計模式系列(二十二) 直譯器模式

2021-07-31 10:30:33 字數 1058 閱讀 6523

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

/** * 直譯器模式

*///abstractexpression:抽象表示式

abstract

class

abstractexpression

//terminalexpression:終結符表示式

class

terminalexpression

extends

abstractexpression

}//nonterminalexpression:非終結符表示式

class

nonterminalexpression

extends

abstractexpression

}//context: 環境類

class

context

public

function

__get

($name)

}$context=new context();

$lists=new terminalexpression();

$lists=new nonterminalexpression();

$lists=new terminalexpression();

$lists=new nonterminalexpression();

foreach ($lists

as$value)

string

'終端直譯器' (length=15)

string

'非終端直譯器' (length=18)

string

'終端直譯器' (length=15)

string

'非終端直譯器' (length=18)

設計模式(二十二) 策略模式

有時候物件需要按照某種策略改變行為,我們可以利用策略模式,將策略或演算法提取出來,作為單獨的類實現。使用策略模式,可以讓具體演算法和應用物件分離,方便的根據不同條件替換策略。下面舉乙個例子。我們有乙個計算器,它會按照快和慢兩種策略來計算結果。所以我們可以將策略封裝起來。public inte ce ...

設計模式(二十二)模板模式

在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。意圖 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構...

設計模式學習(二十二) Visitor

這一篇部落格主要記錄了visitor 訪問器 模式的學習,visitor模式和前面學習的command模式同樣屬於 行為變化 模式。在軟體構建過程中,由於需求的改變,某些類層次結構中常常需要增加新的行為 方法 如果直接在基類中做這樣的更改,將會給子類帶來很繁重的變更負擔,甚至破壞原有設計。如何在不更...