1. 程式人生 > >設計模式(三)

設計模式(三)

裝飾模式

首先這個是分成3個級別,person基類,finery次基類,tshirt子類,bigtrouser子類

關鍵在於次基類把基類作為欄位,並且用decoreate方法person做引數給次基類類做賦值

都有show方法,次基類重寫了show方法,呼叫基類物件的show方法,

在整個物件鏈中,子類迴圈呼叫子類的show方法,先執行自己的特殊語句在執行base.show。並且通過decoreate方法來得到子類物件的變化。

最後鏈頭在person基類上,迴圈結束。

中介者模式

一箇中介者,聯合國

兩個國家,美國和伊拉克

中介者有兩個屬性,美國和伊拉克,並且有一個declare方法引數mes,和college。裡面又是colle的getmessage方法,並且是差錯呼叫,有coll1呼叫coll2,有coll2呼叫coll1.

其中國家中有聯合國這個欄位。有declare方法,引數是mes,裡面是聯合國物件,加message和這個本類物件。

客戶端呼叫的時候

建立聯合國物件,然後建立美國,和伊拉克,

賦值屬性美國和伊拉克,

美國呼叫declare方法產生mes,方法內部其實屬性聯合國的declare方法,其中有呼叫了伊拉克的getmes方法,這樣呀就達到了,美國的訊息傳到了,通過伊拉克的getmase方法輸出了。

指責鏈模式

Handler是一個基類,這個類中有handler success這個欄位,並且可以通過外部賦值。

其中的Handlerequest方法中有判斷,一程執行下一層通過success在次呼叫handlerequst這樣通過複製不同的的success可以通過再次呼叫handlerrequest來達到職責連的效果。

每一個不同的子類,通過success方法上面的的新的方法,來區別每個類建立的意義。功能

命令模式

將請求封裝為一個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作

拿書上的例子打比方,一個barbecuer烤肉串者,有兩個方法

一個命令類bakecommand,其中有欄位barbecuer並且excutecommand呼叫的是barbecuer.bakemutton方法或者bakechickenwing方法。

服務員類waiter

其中有一個欄位comand,賦值給command其中的notify方法就是呼叫的command.excutecommand.

其實就是一個類把另外一個類作為欄位,然後自己的方法呼叫一個類的方法,然後又新增一個類,這個類以上一個類做欄位,繼續呼叫。

最後宣告服務員類,呼叫notify方法。其實就是呼叫的烤肉者的某一個方法,區別或者關鍵點在於,底層類有很多方法,其中中間的類只有一個方法,換句話來說就是中間類只調用了底層類的某一個方法。