// 比如穿T恤,衬衫,外套,皮鞋,运动鞋,靴子...,根据下面的类图完
//被装饰的类
class Person
{
public:
string m_name;
Person() {}; //子类实例化需要无参构造
Person(string name) :m_name(name) {}
virtual void show() { cout << m_name; };
};
//装饰器父类 抽象类
class Finery:public Person
{
protected:
Person* m_per;
public:
Finery(Person* p) :m_per(p) {}; //这里使用person类无参构造 先父类无参 再子类构造
//Finery(Person name, Person* perman) :Person(name), m_per(perman) {}
virtual void show() =0;
};
//具体装饰类
class LongTrouser :public Finery
{
public:
LongTrouser(Person* p):Finery(p) {}; //显示构造父类
void show() {
//调用原来的showf方法
m_per->show();
//装饰
cout << "长袜" << endl;
}
};
class Tshiirts :public Finery
{
public:
Tshiirts(Person* p):Finery(p) {};
void show() {
m_per->show();
cout << "长袖" << endl;
}
};
void test02()
{
Person* p1 = new Person("孙悟空");
Person* p2 = new Person("李文程");
p1->show();
cout << endl;
p2->show();
cout << endl;
Person* f1 = new LongTrouser(p1);
Person* f2 = new Tshiirts(p2);
f1->show();
f2->show();
delete p1;
delete p2;
delete f1;
delete f2;
}
使用c++装饰器模式完成 QQ秀这个游戏,给动画人物搭配不同服饰。
本文介绍了如何在C++中使用装饰器模式,通过装饰器类(如LongTrouser和Tshiirts)对Person类进行扩展,展示了抽象父类Finery和具体装饰类的构造及show方法的实现。
摘要由CSDN通过智能技术生成