結構型模式之 裝飾模式

2022-08-17 14:48:18 字數 1056 閱讀 8774

一般有兩種方式可以實現給乙個類或物件增加行為:

裝飾模式以對客戶透明的方式動態地給乙個物件附加上更多的責任,換言之,客戶端並不會覺得物件在裝飾前和裝飾後有什麼不同。裝飾模式可以在不需要創造更多子類的情況下,將物件的功能加以擴充套件。這就是裝飾模式的模式動機。

模式分析:

例子同樣來自菜鳥教程

我們將建立乙個 shape 介面和實現了 shape 介面的實體類。然後我們建立乙個實現了 shape 介面的抽象裝飾類 shapedecorator,並把 shape 物件作為它的例項變數。

redshapedecorator 是實現了 shapedecorator 的實體類。

decoratorpatterndemo,我們的演示類使用 redshapedecorator 來裝飾 shape 物件。

//

步驟一 建立乙個介面

class

shape

};//

步驟二 建立實現介面的實體類

class rectangle: public

shape

};class circle : public

shape

};//

步驟 3 建立實現了 shape 介面的抽象裝飾類

class shapedecorator : public

shape

shapedecorator(shape *decoratorshape)

void

draw()

};//

步驟 4建立擴充套件了 shapedecorator 類的實體裝飾類

class redshapdecort : public

shapedecorator

redshapdecort() {}

redshapdecort(shape*decortshape)

void

draw()

private

:

void setredborder(shape*s1)

};int

main()

裝飾模式(結構型模式)

裝飾模式是一種動態的給類中新增新行為的設計模式,裝飾模式比生成子類更為靈活,可以給某個物件而不是整個類新增一些功能。值得注意的是裝飾模式的裝飾類也繼承介面類,同時他也有介面類的指標指向他需要裝飾的具體類。外表看著像is a的關係,實際也是has a的關係。實際應用中裝飾類可以同時裝飾幾個具體類。可以...

結構型模式 裝飾模式

裝飾模式是對類的組合進行的擴充。比如現在有個門,現在有一些額外功能,比如 新增鎖 貼春聯 門眼 門框全包 等功能,這些功能可以單獨存在,也可以兩兩組合等隨意組合。怎麼實現這樣的 門 呢.繼承 比如有 貼春聯 門眼 就新增乙個新類,這樣如果需要其他的功能就需要無窮多的子類。組合 加強版組合 裝飾模式 ...

結構型模式之四 裝飾模式

裝飾模式 decorator pattern 動態地給乙個物件增加一些額外的職責,就增加物件功能來說,裝飾模式比生成子類實現更為靈活。其是一種物件結構模式。component 抽象構件定義了物件的介面,可以給這些物件動態增加職責 方法 抽象構件是具體構件和抽象裝飾的共同父類,它宣告了在具體構件中實現...