初学装饰者模式。


看了《大话设计模式》里面的装饰者模式。。。。。没什么大的感觉。就是不用继承过多子类,免得引起子类大爆炸。而用另一个动态的方法来扩展这个类的功能

 

  主要分为 装饰者和被装饰者 ,被装饰者呢就是要扩展功能的类,被装饰者就是用来动态扩展被装饰者功能的类

  

   这里写个自己写的。呵呵,。理解不够彻底,例子将就着,多用几次就有更深的理解了

 

   还记得以前吹的泡泡吧。这里写了一个泡泡类  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写在里面 然后添加颜色只需要继承就行了。

 

本人初学。。。。所以代码不怎么的,理解也不怎么的,嘿嘿。。。


 

 

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