軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性:封裝、繼承、多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c++寫了個小例子,加深一下理解。主要參考《大話設計模式》和《設計模式:可復用物件導向軟體的基礎》兩本書。本文介紹裝飾模式的實現。
裝飾模式:動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾模式相比生成子類更為靈活。有時我們希望給某個物件而不是整個類新增一些功能。比如有乙個手機,允許你為手機新增特性,比如增加掛件、螢幕貼膜等。一種靈活的設計方式是,將手機嵌入到另一物件中,由這個物件完成特性的新增,我們稱這個嵌入的物件為裝飾。這個裝飾與它所裝飾的元件介面一致,因此它對使用該元件的客戶透明。下面給出裝飾模式的uml圖。
如果只有乙個concretecomponent類而沒有抽象的compenent類,那麼decorator類就可以是concretecomponent的乙個子類。同樣道理,如果只有乙個concretedecorator類,那麼久沒有必要建立乙個單獨的decorator類,而可以把decorator和concretedecorator的責任合併成乙個類。
// decorator.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include #include using namespace std;
//公共抽象類
class phone
virtual ~phone() {}
virtual void showdecorate() {}
}; //具體的手機類
class iphone : public phone
~iphone() {}
void showdecorate()
};
//具體的裝飾類
class decoratorphonea : public decoratorphone
void showdecorate()
private:
void adddecorate()
設計模式C 實現 裝飾者模式
裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者和被裝飾者有同樣的超累型別。能夠用乙個或多個裝飾者包裝乙個物件。既然裝飾者和被裝飾者物件有同樣的超累型別,所以在不論什麼須要原始物件 被包裝的 的場合,能夠用裝飾過的物件取代它。裝飾者能夠託付被裝飾者的...
C 實現設計模式之裝飾者模式詳解
目錄 裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者模式提供了比繼承更有彈性的替代方案。裝飾者模式遵循的設計原則 類應該對擴充套件開放,對修改關閉。裝飾者模式中的類如下圖,c 設計模式之裝飾模式 其中component抽象元件類,即被裝飾的類,每個元件都可以單獨使用,或者被裝飾者包起來...
c 設計模式之裝飾者模式
include 公共介面 class component 需要被裝飾的物件 class concretecomponent public component void operation 裝飾a類 class concretedecoratora public decorator 裝飾b類 clas...