設計模式《七》 裝飾模式

2021-10-05 05:32:06 字數 1468 閱讀 1935

顧名思義,裝飾模式就是給乙個物件增加一些新的功能,而且是動態的,要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項。

component:抽象介面,可以給這些物件動態地增加職責。

concretecomponent:component的具體物件,也可以對這個物件新增一下職責。

decorator:裝飾抽閒類,繼承自component,從decorator的繼承類來擴充套件component的功能。

concretedecorator:具體的裝飾物件。

#include using namespace std;

class car

virtual void show() = 0;

};class runcar : public car

virtual void show()

};class swimruncar : public car

void swim()

virtual void show()

private:

car* m_car;

};class flyruncar : public car

void fly()

virtual void show()

private:

car* m_car;

};int main(int argc, char* ar**)

**模式與裝飾模式的區別:

這兩個圖可能使我們產生困惑。這兩個設計模式看起來很像。對裝飾器模式來說,裝飾者(decorator)和被裝飾者(decoratee)都實現同乙個 介面。對**模式來說,**類(proxy class)和真實處理的類(real class)都實現同乙個介面。此外,不論我們使用哪乙個模式,都可以很容易地在真實物件的方法前面或者後面加上自定義的方法。

然而,實際上,在裝飾器模式和**模式之間還是有很多差別的。

裝飾器模式關注於在乙個物件上動態的新增方法,然而**模式關注於控制對物件的訪問。

換句話 說,

用**模式,**類(

proxy class

)可以對它的客戶隱藏乙個物件的具體資訊。因此,當使用**模式的時候,我們常常在乙個**類中建立乙個物件的例項。並且,當我們使用裝飾器模 式的時候,我們通常的做法是將原始物件作為乙個引數傳給裝飾者的構造器。

我們可以用另外一句話來總結這些差別:使用**模式,**和真實物件之間的的關係通常在編譯時就已經確定了,而裝飾者能夠在執行時遞迴地被構造。   

設計模式(七)裝飾模式

裝飾模式介紹 裝飾模式是結構型設計模式之一,不必改變類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能,是繼承的替代方案之一。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。定義動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。裝飾模式結構圖 裝飾模式在現實生...

簡述設計模式(七) 裝飾模式

在軟體開發過程中,當對系統擴充套件功能時,希望復用當前系統中已存在現存元件,並對其進行動態擴充套件以實現新功能。此時,在不修改現存元件的情況下,同時對這些元件進行復用擴充套件。舉個例子,手機本身具備照相功能,但畫質感人,愛美的人都希望在拍照的同時具有美化效果,因此,擴充套件出濾鏡 瘦臉等功能。針對這...

JavaScript設計模式七 裝飾者模式

裝飾者模式提供比繼承更有彈性的替代方案。裝飾者用於包裝同介面的物件,用於通過過載方法的形式新增新功能,該模式可以在被裝飾者的前面或後面加上自己的行為以達到特定的目的。簡單的理解 給物件動態新增職責的方式稱為裝飾著模式。舉乙個簡單的例子 var xiaoming function this.eat f...