Decorator 裝飾模式

2021-06-22 16:00:07 字數 2279 閱讀 5765

定義

動態的給乙個物件新增一些輔助功能,而不改變原有的類。

案例

假如現在有個文字控制項textview,它可以在螢幕上顯示文字,但當文字過多的時候,乙個螢幕顯示不下,這時就需要給它新增乙個滾動條。給乙個視窗加乙個滾動條不是原有的功能,而是額外的功能,比如還可以加乙個黑色外框,而且這些操作不是為某乙個控制項設定的,其他的控制項也可以用,如果用子類化來實現,就得不償失了。使用裝飾模式可以輕鬆的實現:

widget是乙個視窗基類,它定義了所有視窗類需要的操作。textview和decorator繼承相同的基類,因為它們必須體統統一的介面。

class

widget

virtual

void

resize

()}

class

textview

:public

widget

private

:string m_text

;}

class

decorator

:public

widget

virtual

void

draw

()

virtual

void

resize

()private

:

widget

*m_component

;}

class

scrolldecorator

:public

decorator

virtual

void

draw

(decorator

::draw

();drawscroll

();)

virtual

void

resize

(resizescroll

();)

}

class

borderdecorator

:public

decorator

private

:

intm_width

;}

textview

*textview

=new

textview

();scrolldecorator

*scrolldecroator

=new

scrolldecorator

(textview

);borderdecorator

*borderdecorator

=new

borderdecorator

(scrolldecorator

);

適用性優缺點比靜態繼承更靈活

避免在層次結構中的類有太多的特性

注意

裝飾類decorator和被裝飾物件textview的類有相同的介面,擁共同的基類。

相關模式

adapter模式是改變物件的介面的方式,提供給其他類使用。

composite模式是在與物件的聚集,decorator模式是composite模式的乙個退化,只在於新增一些額外功能。

strategy模式是改變物件核心的方式進行,decorator是改變物件的外表。

裝飾模式 Decorator

裝飾模式 decorator 動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。其中component定義了乙個物件介面,可以給這些物件動態的新增職責 concretecomponent是定義了乙個具體的物件,也可以給這個物件新增一些職責 decorator裝飾抽象類,...

裝飾模式 Decorator

裝飾模式 decorator 1.裝飾模式 decorator 的定義 又名包裝 模式,裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案。2.裝飾模式以對客戶端透明的方式動態的給乙個物件附加上更多的責任。換言之客戶端並不會覺的物件在裝飾前和裝飾後有什麼區別。3.裝飾模式可以在...

裝飾模式 Decorator

裝飾模式的角色 給出乙個抽象介面,以規範準備接收附加職責的物件.定義乙個將要接收附加職責的類.持有乙個構件 component 物件的引用,並定義乙個與抽象構件介面一致的介面.負責給構件物件 貼上 附加的職責.裝飾模式的特點 裝飾模式 vs 繼承 裝飾模式 繼承 用來擴充套件特定物件的功能 用來擴充...