裝飾者模式

2021-09-24 10:12:51 字數 1474 閱讀 7090

在現實生活中,常常需要對現有產品增加新的功能或美化其外觀,如房子裝修、相片加相框等。在軟體開發過程中,有時想用一些現存的元件。這些元件可能只是完成了一些核心功能。但在不改變其結構的情況下,可以動態地擴充套件其功能。所有這些都可以釆用裝飾模式來實現。裝飾模式的定義與特點

裝飾(decorator)模式的定義:指在不改變現有物件結構的情況下,動態地給該物件增加一些職責(即增加其額外功能)的模式,它屬於物件結構型模式。裝飾(decorator)模式的主要優點有:

1、採用裝飾模式擴充套件物件的功能比採用繼承方式更加靈活。

2、可以設計出多個不同的具體裝飾類,創造出多個不同行為的組合。其主要缺點是:

裝飾模式增加了許多子類,如果過度使用會使程式變得很複雜。裝飾模式的結構與實現

通常情況下,擴充套件乙個類的功能會使用繼承方式來實現。但繼承具有靜態特徵,耦合度高,並且隨著擴充套件功能的增多,子類會很膨脹。如果使用組合關係來建立乙個包裝物件(即裝飾物件)來包裹真實物件,並在保持真實物件的類結構不變的前提下,為其提供額外的功能,這就是裝飾模式的目標。下面來分析其基本結構和實現方法。1. 模式的結構

裝飾模式主要包含以下角色。

①抽象構件(component)角色:定義乙個抽象介面以規範準備接收附加責任的物件。

②具體構件(concrete component)角色:實現抽象構件,通過裝飾角色為其新增一些職責。

③抽象裝飾(decorator)角色:繼承抽象構件,幷包含具體構件的例項,可以通過其子類擴充套件具體構件的功能。

④具體裝飾(concretedecorator)角色:實現抽象裝飾的相關方法,並給具體構件物件新增附加的責任。裝飾模式的結構圖

2. 模式的實現

裝飾模式的實現**如下:package decorator;public class decoratorpattern}//抽象構件角色inte***ce component//具體構件角色class concretecomponent implements component public void operation() }//抽象裝飾角色class decorator implements component public void operation() }//具體裝飾角色class concretedecorator extends decorator public void operation() public void addedfunction() }

--------------呼叫具體構件角色的方法operation()為具體構件角色增加額外的功能addedfunction()

式的應用場景

前面講解了關於裝飾模式的結構與特點,下面介紹其適用的應用場景,裝飾模式通常在以下幾種情況使用。

當需要給乙個現有類新增附加職責,而又不能採用生成子類的方法進行擴充時。例如,該類被隱藏或者該類是終極類或者採用繼承方式會產生大量的子類。

當需要通過對現有的一組基本功能進行排列組合而產生非常多的功能時,採用繼承關係很難實現,而採用裝飾模式卻很好實現。

當物件的功能要求可以動態地新增,也可以再動態地撤銷時。

裝飾者模式

裝飾者模式 動態地將責任附加到物件上。若要擴張功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。裝飾者與被裝飾者物件具有相同的超型別。include include using namespace std class bever...

裝飾者模式

裝飾者模式,是在不改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。裝飾者模式中的角色 1 被裝飾者抽象component,是乙個介面或抽象類,就是定義最核心的物件,也是最原始的物件,這個類是需要裝飾類的基類。2 被裝飾者具體實現co...

裝飾者模式

裝飾者模式 裝飾者模式的好處是便於擴充套件,對乙個東西不管怎麼變,只需要找到相應的元件去改變它 1.如何組裝在一起 建立主題 packetbodycreator body new packetbodycreator 建立header packethtmlheadercreator html new ...