好幾天沒出部落格了,在學習android的一些新控制項的時候,用到了乙個模式,叫裝飾者模式,所以在此講講這個模式。
)模式,包含以下四個角色:
1、抽象構件(component)
角色:給出乙個抽象介面,以規範準備接收附加責任的物件。
2、具體構件(concretecomponent)
角色:定義乙個將要接收附加責任的類。
3、裝飾
(decorator)
角色:持有乙個構件
(component)
物件的例項,並定義乙個與抽象構件介面一致的介面。
4、具體裝飾
(concretedecorator)
角色:負責給構件物件「貼上」附加的責任。
uml關係圖:
裝飾者模式uml
比喻:小明想去買手機,去了手機店,看到智慧型機,想要一部智慧型機,選擇android
手機,但看到的一部
android
機,android
手機只能玩
android
遊戲,目前還想要帶**的安卓機,服務員過來,按照著**手機把**功能加進去了(當然現在
android
機都帶**,只是假設沒帶**功能)。
1)抽象構件角色
iphone
,可以是介面或抽象類,這裡比喻做手機(這裡定義為
iphone,
前面的i
是介面的意思,並不是蘋果手機):
/*** 手機(抽象構件角色)
*/public inte***ce iphone
2)具體構件角色
musicphone
,這裡比喻做**手機:
/*** **手機(具體構件角色)
*/public class musicphone implements iphone
}3)裝飾角色
smartphone
,並建立乙個抽象方法,把處理的事情延遲到子類中處理,這裡比喻為智慧型機:
/*** 智慧型機(裝飾角色)
*/public abstract class smartphone implements iphone
@override
public void function()
abstract void advancedfunction();
}4)具體裝飾角色
androidphone
,這裡比喻為安卓機:
/*** 安卓機(具體裝飾角色)
*/public class androidphone extends smartphone
@override
public void function()
@override
void advancedfunction()
}5)呼叫如下:
private void initdecorator()
優點:1、比繼承更加的靈活。
2、可以動態擴充套件乙個物件功能。
缺點:1、會產生很多的小物件,增加了**的複雜性。
2、出錯排查比較的麻煩。
使用場合:
1、在不影響其他物件的情況下,以動態、透明的方式給單個物件新增職責。
2、需要動態地給乙個物件增加功能,這些功能也可以動態地被撤銷。當不能採用繼承的方式對系統進行擴充或者採用繼承不利於系統擴充套件和維護時。
設計模式 裝飾者模式
public abstract class beverage public abstract double cost public abstract class condimentdecorator extends beverage public class darkroast extends be...
設計模式 裝飾者模式
沒什麼特別的,之前看懂了,這次自己再複述一下。畢竟把別人講懂了才是真的懂了。主要參考了head first 設計模式。例子講述的是在為星巴克咖啡的製作訂單的情況,比如客人點了飲料,那麼系統會自動算出 不知道是我沒有體會到,還是這個例子不太合適,算出 那麼簡單的事還需要用到類?不過不影響我們思考裝飾者...
設計模式 裝飾者模式
一 什麼是裝飾者模式 動態地給一些物件新增一些額外的功能。就增加功能來說裝飾者模式比生成子類更加靈活。裝飾者模式是一種物件結構型模式。二 裝飾者模式的優缺點 1 裝飾者模式與 類繼承都是實現功能的擴充套件,但是裝飾者模式比類繼承有更多的靈活性。2 裝飾者模式可以使用具體裝飾類的排列組合,這樣一來可以...