設計模式(三)裝飾者模式(Decorator)
維基百科定義
裝飾模式指的是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。
功能
動態地給一個對象添加一些額外的職責。裝飾者模式相較於子類更加靈活,以對客戶端透明的方式擴展對象。
使用環境
(1)在不影響其他對象的情況下,以動態、透明的方式給單個對象添加職責。
(2)處理那些可以撤消的職責。
(3)當不能採用生成子類的方法進行擴充時。一種情況是,可能有大量獨立的擴展,為支持每一種組合將產生大量的子類,使得子類數目呈爆炸性增長。另一種情況可能是因為類定義被隱藏,或類定義不能用於生成子類。
參與者
1.Component(被裝飾對象的基類):定義一個對象介面,可以給這些對象動態地添加職責。
Advertisements
2.ConcreteComponent(具體被裝飾對象):定義一個對象,可以給這個對象添加一些職責。
3.Decorator(裝飾者抽象類):維持一個指向Component實例的引用,並定義一個與Component介面一致的介面。
4.ConcreteDecorator(具體裝飾者):具體的裝飾對象,給內部持有的具體被裝飾對象,增加具體的職責。
代碼實現:
第一步:定義被裝飾對象基類(可以是抽象類也可以是介面)
第二步:定義具體被裝飾對象
第三步:定義裝飾者抽象類
第四步:定義具體的裝飾者對象
運行
總結
OO原則:動態地將功能或修飾附加到對象上,若需要擴展其他功能,除繼承外,可優選此模式實現功能。