1 前言
在面向對象軟件中,向對象添加“東西”(行為),而不破壞其原有風格,因此增強了的對象是同一個類的加強版。任何“增強”均可以動態添加和刪除。我們把這個設計模式叫做“裝飾”,裝飾對象可以附加到另一個裝飾對象,也可以附加到原始對象,對其功能進行擴展,同時保留原始行為不受影響。
2 詳述
2.1 簡述
動態的給一個對象太添加一些額外的職責。就擴展功能來說,裝飾模式相比生成子類更為靈活。
2.2 何時使用
(1)想要在不影響其他對象的情況下,以動態,同名的方式給單個對象添加職責。
(2)想要擴展一個類的行為,卻做不到。類定義可以被隱藏,無法進行子類化;或者,對累的每個行為的擴展,為支持每種功能組合,將產生大量的子類。
(3)對類的職責的擴展是可選的。
2.3 Objective-C范疇與裝飾模式
范疇是一個Objective-C的語言功能,通過它可以向類添加行為(方法的接口與實現),而不必進行子類化。通過范疇添加的方法對類原有的方法沒有不良影響。范疇中得方法成為了類的一部分,並可由其子類繼承。
但這並不是一種嚴格的裝飾模式的實現,它實現了模式的意圖,但卻是一種變體。由裝飾器范疇添加的行為是編譯時綁定的,雖然Objective-C原本支持動態綁定。而且裝飾器范疇實際上沒有封裝被擴展類的實例。
但是事先少量的裝飾器的時候,它比真正子類方式更為輕量,容易。
3 結語
以上是所有內容,希望對大家有所幫助。