设计模式之三装饰模式

//decorate model
//用于给某些类动态添加功能,虽然添加了一些功能,但人还是人,只不过是装饰后的人
#include<iostream>
#include<string>

using namespace std;

class Person{//被装饰对象类
public:
	virtual void show()
	{
		cout<<"Person"<<endl;
	}

};

class Decorate:public Person{//所有装饰类的基类
public:
	void setPerson(Person* dePerson)
	{//设置该类所装饰的对象,该函数传递的是一Person类的指针,所以也可以由子类初始化
		person=dePerson;
	}

    void show()
	{//显示函数,这一函数是一个虚函数,可以由子类实现
		//而且,person是一个基类指针,具体指向由用户决定
		if(person!=NULL)
			person->show();
	}

protected:
	Person *person;
};

class Tshirts:public Decorate{
public:
	void addFunction1()
	{//特有操作
		cout<<"function1 added"<<endl;
	}

	void show()
	{
		addFunction1();//子类添加的功能
		Decorate::show();//被装饰对象原有的功能
	}
};

class Trouser:public Decorate{
public:
	void addFunction2()
	{//特有操作
		cout<<"function2 added"<<endl;
	}

	void show()
	{
		addFunction2();//子类添加的功能
		Decorate::show();//子被装饰对象原有的功能
	}
};

int main()
{
	Person* person=new Person();
	person->show();

	Tshirts* tshir=new Tshirts();
	tshir->setPerson(person);
	tshir->show();

	Trouser* trou=new Trouser();
	trou->setPerson(tshir);
	trou->show();
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值