IOS設計模式學習(16)裝飾

來源:互聯網
上載者:User

1 前言

在物件導向軟體中,向對象添加“東西”(行為),而不破壞其原有風格,因此增強了的對象是同一個類的加強版。任何“增強”均可以動態添加和刪除。我們把這個設計模式叫做“裝飾”,裝飾對象可以附加到另一個裝飾對象,也可以附加到原始對象,對其功能進行擴充,同時保留原始行為不受影響。

2 詳述

2.1 簡述

動態給一個對象太添加一些額外的職責。就擴充功能來說,裝飾模式相比產生子類更為靈活。

2.2 何時使用

(1)想要在不影響其他對象的情況下,以動態,同名的方式給單個對象添加職責。

(2)想要擴充一個類的行為,卻做不到。類定義可以被隱藏,無法進行子類化;或者,對累的每個行為的擴充,為支援每種功能組合,將產生大量的子類。

(3)對類的職責的擴充是可選的。

2.3 Objective-C範疇與裝飾模式

範疇是一個Objective-C的語言功能,通過它可以向類添加行為(方法的介面與實現),而不必進行子類化。通過範疇添加的方法對類原有的方法沒有不良影響。範疇中得方法成為了類的一部分,並可由其子類繼承。

但這並不是一種嚴格的裝飾模式的實現,它實現了模式的意圖,但卻是一種變體。由裝飾器範疇添加的行為是編譯時間綁定的,雖然Objective-C原本支援動態綁定。而且裝飾器範疇實際上沒有封裝被擴充類的執行個體。

但是事先少量的裝飾器的時候,它比真正子類方式更為輕量,容易。

3 結語

以上是所有內容,希望對大家有所協助。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.