初學裝飾者模式。


看了《大話設計模式》裏面的裝飾者模式。。。。。沒什麼大的感覺。就是不用繼承過多子類,免得引起子類大爆炸。而用另一個動態的方法來擴展這個類的功能

 

  主要分爲 裝飾者和被裝飾者 ,被裝飾者呢就是要擴展功能的類,被裝飾者就是用來動態擴展被裝飾者功能的類

  

   這裏寫個自己寫的。呵呵,。理解不夠徹底,例子將就着,多用幾次就有更深的理解了

 

   還記得以前吹的泡泡吧。這裏寫了一個泡泡類  bubble

class bubble
{
public:	void OutPut() {cout<< "泡泡" <<endl;}
};

   這個時候生成的泡泡是沒什麼顏色的 但是如果我想要紅色的泡泡呢   可以繼承,但是我又需要藍色泡泡呢,沒錯,還是可以繼承 但是我要五顏六色的不同組合的泡泡呢,那樣繼承下來就可能造成很多個子類了,這個時候就可以用到裝飾者模式了,動態的給泡泡增加顏色,下面在寫一個 總泡泡類

class Mainbubble
{
public:
	virtual void OutPut() {}
};

這樣將泡泡類繼承於這個類

class bubble:public Mainbubble
{
public:
	void OutPut() {cout<< "泡泡" <<endl;}
};

再寫一個紅色類一個黑色類

class RedBubble:public Mainbubble
{
	Mainbubble *MBubble;
	public:
		void SetBubble(Mainbubble *b){MBubble = b;}
		void OutPut() {cout <<"紅色"; MBubble->OutPut();}
};
class BlaclBubble:public Mainbubble
{
	Mainbubble *MBubble;
public:
	void SetBubble(Mainbubble *b){MBubble = b;}
	void OutPut() {cout <<"黑色"; MBubble->OutPut();}
};

這樣一來 泡泡就可以用黑色和紅色來裝飾 不管是先紅色 還是先黑色

這裏是主函數代碼

int main()
{
	Mainbubble *b = new bubble;
	RedBubble *c = new RedBubble;
	BlaclBubble *d = new BlaclBubble;

	c->SetBubble(b);
	d->SetBubble(c);
	d->OutPut();
	system("pause");
	return 0;
}


輸出就是  紅色黑色泡泡 這樣不管怎麼組合 或者像添加新的,就只要添加新顏色 然後在進行組合就行了 

當然可以從總泡泡類在繼承一個類 將函數SetBubble寫在裏面 然後添加顏色只需要繼承就行了。

 

本人初學。。。。所以代碼不怎麼的,理解也不怎麼的,嘿嘿。。。


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章