設計模式(三)
裝飾模式
首先這個是分成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方法。其實就是呼叫的烤肉者的某一個方法,區別或者關鍵點在於,底層類有很多方法,其中中間的類只有一個方法,換句話來說就是中間類只調用了底層類的某一個方法。