裝 飾模式又名包裝模式,以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案。它使用原來被裝飾的類的乙個子類的例項,把客戶端的呼叫委派到被裝 飾類,客戶端並不會覺得物件在裝飾前和裝飾後有什麼不同。在以下情況下應使用裝飾模式:需要擴充套件乙個類的功能,或給乙個類增加附加責任。動態地給乙個物件 增加功能,這些功能可以再動態地撤銷。需要增加由一些基本功能的排列組合而產生的非常大量的功能,從而使繼承關係變得不現實。
類圖如下所示:
裝飾模式包括如下角色:
抽象構件(component):給出乙個抽象介面,以規範準備接收附加責任的物件。
具體構件(concrete component):定義乙個將要接收附加責任的類。
裝飾(decorator):持有乙個構件物件的例項,並定義乙個與抽象構件介面一致的介面。
具體裝飾(concrete decorator):負責給構件物件「貼上」附加的責任。
component:
public
inte***ce component
// end inte***ce definition component
decorator:
public
class decorator : component
public
virtual
void sampleoperation()
}// end class definition decorator
concretecomponent:
public
class concretecomponent : component
}// end class definition concretecomponent
concretedecorator1:
public
class concretedecorator1 : decorator
override
public
void sampleoperation()
}// end class definition concretedecorator1
concretedecorator2:
public
class concretedecorator2 : decorator
override
public
void sampleoperation()
}// end class definition concretedecorator2
client:
static
void main(string args)
程式輸出如下:
concretecomponent sampleoperation
concretedecorator1 sampleoperation
concretedecorator2 sampleoperation
c 設計模式(裝飾模式)
動態地給乙個物件新增一些額外的職責 不重要的功能,只是偶然一次要執行 就增加功能來說,裝飾模式比生成子類更為靈活。建造過程不穩定,按正確的順序串聯起來進行控制。good 當你向舊的類中新增新 時,一般是為了新增核心職責或主要行為。而當需要加入的僅僅是一些特定情況下才會執行的特定的功能時 簡單點就是不...
C 設計模式 裝飾模式
目錄 基本概念 和例項 裝飾模式是為已有功能動態地新增更多功能的一種方式。當系統需要新功能的時候,是向舊系統的類中新增新 這些新 通常裝飾了原有類的核心職責或主要行為。裝飾模式的優點 1.把類中的裝飾功能從類中搬移出去,這樣可以簡化原有的類 2.有效地把類的核心職責和裝飾功能區分開了。而且可以去除相...
設計模式 裝飾模式 C
動態地給乙個物件新增一些額外的職責。適用場景 1 在不影響其他物件的情況下,以動態 透明的方式給單個物件新增職責。2 處理那些可以取消的職責。3 不能或不好採用生成子類的方法擴充職責。就增加功能來說,裝飾模式相比生成子類更為靈活。有時我們希望給某個物件而不是整個類新增一些功能。比如有乙個手機,允許你...