装饰着模式允许向一个现有的对象添加新的功能,同时又不改变其结构。
该模式属于结构性模式,它是作为现有的类的一个包装。
以下代码不改变类Car的内部结构,而为其增加新的功能
代码如下:
#include <iostream>
#include <list>
#include <memory>
using namespace std;
//抽象 构件 类
class Transform{
public:
virtual void move() = 0;
};
//具体构件类
class Car : public Transform{
public:
Car(){
cout << "Transform is car" << endl;
}
void move(){
cout << "move on land" << endl;
}
};
//抽象装饰类
class Changer : public Transform{
public:
Changer(shared_ptr<Transform> transform){
this->transform = transform;
}
void move(){
transform->move();
}
private:
shared_ptr<Transform> transform;
};
//具体装饰类
class Robot : public Changer{
Robot(shared_ptr<Transform> transform) : Changer(transform){
cout << "changer to robot" << endl;
}
void say(){
cout << "robot say" << endl;
}
};
//具体装饰类
class Airplane : public Changer{
Airplane(shared_ptr<Transform> transform) : Changer(transform){
cout << "changer to airplane" << endl;
}
void say(){
cout << "airplane fly" << endl;
}
};
int main()
{
//测试
return 0;
}