95、装饰器模式
装饰器模式(Decorator Pattern)允许向⼀个现有的对象添加新的功能,同时⼜不改变其结构。
这种类型的设计模式属于结构型模式,它是作为现有的类的⼀个包装。
代码没有改变 Car 类的内部结构,还为其增加了新的功能,这就是装饰器模式的作⽤。
#include <iostream>
#include <list>
#include <memory>
using namespace std;
//抽象构件类 Transform (变形⾦刚)
class Transform{
public:
virtual void move() = 0;
};
//具体构件类Car
class Car : public Transform{
public:
Car(){
std::cout << "变形⾦刚是⼀辆⻋!" << endl;
}
void move(){
std::cout << "在陆地上移动。" << endl;
}
};
//抽象装饰类
class Changer : public Transform{
public:
Changer(shared_ptr<Transform> transform){
this->transform = transform;
}
void move(){
transform->move();
}
private:
shared_ptr<Transform> transform;
};
//具体装饰类Robot
class Robot : public Changer{
public:
Robot(shared_ptr<Transform> transform) : Changer(transform){
std::cout << "变成机器⼈!" << std::endl;
}
void say(){
std::cout << "说话!" << std::endl;
}
};
//具体装饰类AirPlane
class Airplane : public Changer{
public:
Airplane(shared_ptr<Transform> transform) : Changer(transform){
std::cout << "变成⻜机!" << std::endl;
}
void say(){
std::cout << "在天空⻜翔!" << std::endl;
}
};
int main(void){
shared_ptr<Transform> camaro = make_shared<Car>();
camaro->move();
std::cout << "--------------" << endl;
shared_ptr<Robot> bumblebee = make_shared<Robot>(camaro);
bumblebee->move();
bumblebee->say();
return 0;
}
/*
输出
变形⾦刚是⼀辆⻋!
在陆地上移动。
--------------
变成机器⼈!
在陆地上移动。
说话!
--------------
变成⻜机!
在陆地上移动。
在天空⻜翔!
*/Last updated