我理解的装饰器模式

//定义一个原始的抽象类煎饼
class Pancake {
public:
    std::string name;
    int price = 0;
    virtual ~Pancake() = default;
};

//具体的装饰器基类
class MeatPancake : public Pancake {
public:
    MeatPancake() {
        this->name  = "肉煎饼";
        this->price = 5;
    }

};

//具体的装饰器基类
class EggPancake : public Pancake {
public:
    EggPancake() {
        this->name  = "鸡蛋煎饼";
        this->price = 3;
    }
};

//抽象装饰类
class PancakeDecorator : public Pancake {
protected:
    Pancake* _pancake = nullptr;//维护一个Pancake对象的引用,为Pancake对象添加装饰
public:
    explicit PancakeDecorator(Pancake* pancake) : _pancake(pancake) {
    }
    ~PancakeDecorator() override = default;
};

class Egg : public PancakeDecorator {
public:
    explicit Egg(Pancake* pancake) : PancakeDecorator(pancake) {
       this->name  = pancake->name  + " + 鸡蛋";
       this->price = pancake->price + 2;
       std::cout << this->name << " price: " << this->price << std::endl;
    }
};

class Potato : public PancakeDecorator {
public:
    explicit Potato(Pancake* pancake) : PancakeDecorator(pancake) {
        this->name  = pancake->name  + " + 土豆";
        this->price = pancake->price + 3;
        std::cout << this->name << " price: " << this->price << std::endl;
    }
};

EggPancake* eggPancake = new EggPancake();
Egg* egg = new Egg(eggPancake);
Potato* potato = new Potato(egg);
鸡蛋煎饼 + 鸡蛋 price: 5
鸡蛋煎饼 + 鸡蛋 + 土豆 price: 8
阅读 947
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进