設計模式(三)裝飾者模式(Decorator)

維基百科定義

裝飾模式指的是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。

功能

動態地給一個對象添加一些額外的職責。裝飾者模式相較於子類更加靈活,以對客戶端透明的方式擴展對象。

使用環境

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

(2)處理那些可以撤消的職責。

(3)當不能採用生成子類的方法進行擴充時。一種情況是,可能有大量獨立的擴展,為支持每一種組合將產生大量的子類,使得子類數目呈爆炸性增長。另一種情況可能是因為類定義被隱藏,或類定義不能用於生成子類。

參與者

1.Component(被裝飾對象的基類):定義一個對象介面,可以給這些對象動態地添加職責。

Advertisements

2.ConcreteComponent(具體被裝飾對象):定義一個對象,可以給這個對象添加一些職責。

3.Decorator(裝飾者抽象類):維持一個指向Component實例的引用,並定義一個與Component介面一致的介面。

4.ConcreteDecorator(具體裝飾者):具體的裝飾對象,給內部持有的具體被裝飾對象,增加具體的職責。

代碼實現:

第一步:定義被裝飾對象基類(可以是抽象類也可以是介面)

第二步:定義具體被裝飾對象

第三步:定義裝飾者抽象類

第四步:定義具體的裝飾者對象

運行

總結

OO原則:動態地將功能或修飾附加到對象上,若需要擴展其他功能,除繼承外,可優選此模式實現功能。

Advertisements

Advertisements

你可能會喜歡