设计模式-装饰器模式

143 阅读1分钟

装饰器模式是一种结构性设计模式,它允许在不改变现有对象结构的情况下,动态地将新行为添加到对象中。它通过将对象包装在具有相同接口的装饰器中,然后通过组合来添加新的功能或修改原始对象的行为。

  装饰器模式的本质在于通过组合而非继承的方式来拓展对象的功能。它提供了一种灵活的方式来添加或修改对象的行为,同时遵循开闭原则。

image.png

#include <iostream>
#include <memory>
using namespace std;
class Car  // 抽象基类
{
public:
    virtual void show() = 0;
};
// 三个实体基类
class Bmw :public Car
{
public:
    void show() { cout << "这是一辆宝马汽车,配置有:基本配置" << endl; }
};
class Audi :public Car
{
public:
    void show() { cout << "这是一辆奥迪汽车,配置有:基本配置" << endl; }
};
class Benz :public Car
{
public:
    void show() { cout << "这是一辆奔驰汽车,配置有:基本配置" << endl; }
};
// 装饰器的基类
class CarDecorator :public Car
{
public:
    CarDecorator(Car *p):pCar(p) {} 
private:
    Car* pCar;
};
// 装饰器1 定速巡航
class ConcreteDecorator01 :public Car
{
public:
    ConcreteDecorator01(Car* p) :pCar(p) {}
    void show()
    {
        pCar->show();
        cout << ",定速巡航";
    }
private:
    Car* pCar;
};
class ConcreteDecorator03 :public Car
{
public:
    ConcreteDecorator03(Car* p) :pCar(p) {}
    void show()
    {
        pCar->show();
        cout << ",车道偏离";
    }
private:
    Car* pCar;
};
class ConcreteDecorator02 :public Car
{
public:
    ConcreteDecorator02(Car* p) :pCar(p) {}
    void show()
    {
        pCar->show();
        cout << ",定速巡航";
    }
private:
    Car* pCar;
};
int main()
{
    Car* p1 = new ConcreteDecorator01(new Bmw());
    p1 = new ConcreteDecorator02(p1);
    p1->show();
    cout << endl;
    Car* p2 = new ConcreteDecorator02(new Audi());
    p2->show();
    cout << endl;
    Car* p3 = new ConcreteDecorator03(new Benz());
    p3->show();
    cout << endl;

    return 0;
}

image.png