C 設計模式之 裝飾模式

2021-08-27 08:35:33 字數 1909 閱讀 2076

裝飾模式(decorator):動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生在子類更為靈活

component是定義乙個物件介面,可以給這些物件動態地新增職責

concretecomponent是定義乙個具體物件,也可以給這個物件新增一些職責

decorator,裝飾抽象類,繼承了component,從外類來擴充套件component類的功能,但對於component來說,是無需知道decorator存在的.

concretedecorator是具體的裝飾物件,起到給乙個物件裝飾a裝飾b新增職責的功能

// component.cs

abstract class component

// concretecomponent.cs

class concretecomponent : component

}

// decorator.cs

abstract class decorator : component

public

override

void

operation()}}

// concretedecoratora.cs

class concretedecoratora : decorator

}

// concretedecoratorb.cs 

class concretedecoratorb : decorator

}

// test

component c = new concretecomponent();

concretedecoratora a = new concretedecoratora();

concretedecoratorb b = new concretedecoratorb();

a.setcomponent(c);

b.setcomponent(a);

b.operation();

// 輸出

乙個物件

裝飾a裝飾b

總結裝飾模式是為已有功能動態地新增更多功能的一種方式

何時使用?

當系統需要新增新功能時,向舊類中新增新的**,這些新加的**通常裝飾了原有類的核心職責或主要行為

問題在於:新加入的變數,方法或邏輯增加了主類的複雜度,但新加的這些東西可能只在某些特定情況下才會執行的特殊行為

裝飾者把每個要裝飾的功能放在單獨的類中,並讓這個類包裝它所要裝飾的物件,當需要執行特殊行為時,客戶就可以在執行時根據需要有選擇地、按順序地使用裝飾功能包括物件了

優點

把類中的裝飾功能從類中搬移分離出去,可以簡化原有的類,有效的把類的核心職責和裝飾功能區分開,並且可以去除相關類中重複的裝飾邏輯,但如果裝飾順序很重要,就要注意了

c 設計模式之裝飾模式

裝飾模式能夠實現動態的為物件新增功能,是從乙個物件外部來給物件新增功能。通常給物件新增功能,要麼直接修改物件新增相應的功能,要麼派生對應的子類來擴充套件,抑或是使用物件組合的方式。顯然,直接修改對應的類這種方式並不可取。在物件導向的設計中,而我們也應該盡量使用物件組合,而不是物件繼承來擴充套件和復用...

C 設計模式之裝飾模式

動態地給乙個物件增加一些額外的職責,就增加物件的功能來說,裝飾模式比生成子類更為靈活。裝飾模式是一種物件結構模式。我們常常通過繼承的方式來對乙個既有的類進行功能新增,但繼承方式有顯著的侷限性,因為 例如在視窗控制項當中,要增加新的功能如增加滾動條,增加背景,通過繼承的方式來增加新的功能,有下面的解決...

c 設計模式之裝飾模式

裝飾器模式 動態地給乙個物件新增一些額外的工作職責,就增加功能來說,裝飾器模式比繼承的子類更靈活。裝飾模式的類結構圖 兌現 include include using namespace std class car class runcar public car public void showca...