1. 程式人生 > >《大話設計模式》筆記(4)——行為型模式2

《大話設計模式》筆記(4)——行為型模式2

int mage accept 中轉 memento font algorithm 獲得 因此

19、解釋器模式(Interpreter)

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

UML:

技術分享圖片

PS:覺得解釋器模式在實際中很少有機會能用上。

20、中介者模式(Mediator)

定義:用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地互相引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。

UML:

技術分享圖片

PS:這模式應該算容易理解了,就是把ConcreteColleague1與ConcreteColleague2之間的互相交互,轉移到ConcreteMediator中去,因為Mediator的出現而減少了Colleague之間的耦合,這樣把耦合集中轉移至Mediator中去,這樣會使Mediator變得更加復雜。

應用場景類比:聯合國

21、訪問者模式(Visitor)

定義:表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。

UML:

技術分享圖片

PS:Vistor類就是作用於Element對象結構中個元素的操作,如上面UML中ConcreteVistor1.VisitConcreteElementA()就是對ConcreteElementA的一種操作,然後在ConcreteElementA.Accept(in :Vistor)接受一個Vistor對象,並調用這個Vistor的VisitConcreteElementA()方法,因此,如果需要對一個現有元素ConcreteElement進行新的操作時,不需要改動這個現有元素ConcreteElement,只需要添加新的Vistor類即可。

22、策略模式(Strategy)

定義:策略模式是指對一系列的算法定義,並將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨立於使用它的客戶而獨立變化。

UML

技術分享圖片

PS:因為Context類中的ContextInterface中調用Strategy.AlgorithmInterface(),這時客戶端根據需要傳入具體的算法類ConcreateStrategy給Context中的Strategy變量,便可獲得相應策略的結果。這樣就減少了使用各種算法的客戶端與算法類之間的耦合。

參考代碼

技術分享圖片

應用場景類比:商場不同的打折方式。

23、備忘錄模式(Memento)

定義:

在不破壞封閉的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。這樣以後就可將該對象恢復到原先保存的狀態。

UML:

技術分享圖片

PS:專門建一個Memento實體類來保存Originator中需要保存狀態,而CareTaker則只是用來存取Memento。

應用場景類比:遊戲進度備忘

24、叠代器模式(Iterator)

定義:提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內部表示。

UML:

技術分享圖片

PS:ConcreteAggregate.CreateIterator()創建叠代器Iterator,Iterator就可以針對ConcreteAggregate中的聚合就行遍歷。在.net中已經提供了IEumerator的叠代器,IEumerable接口裏聲明了GetEumerator()來取得叠代器。

《大話設計模式》筆記(4)——行為型模式2