37 lines
780 B
C++
37 lines
780 B
C++
/**
|
||
* @name 装饰器模式
|
||
* @brief: 动态添加职责
|
||
* @note 场景:流处理(加密/压缩装饰)、GUI 组件增强
|
||
*/
|
||
|
||
class Coffee {
|
||
public:
|
||
virtual double cost() = 0;
|
||
};
|
||
class SimpleCoffee : public Coffee {
|
||
public:
|
||
double cost() override { return 6.9; }
|
||
};
|
||
|
||
class CoffeeDecorator : public Coffee {
|
||
protected:
|
||
Coffee* coffee;
|
||
public:
|
||
CoffeeDecorator(Coffee* c) : coffee(c) {}
|
||
};
|
||
|
||
class MilkDecorator : public CoffeeDecorator {
|
||
public:
|
||
MilkDecorator(Coffee* c) : CoffeeDecorator(c) {}
|
||
double cost() override {
|
||
return coffee->cost() + 0.5; // 增加牛奶费用
|
||
}
|
||
};
|
||
|
||
// 使用
|
||
int main()
|
||
{
|
||
Coffee* coffee = new SimpleCoffee();
|
||
coffee = new MilkDecorator(coffee); // 动态装饰
|
||
coffee->cost(); // 基础 + 牛奶
|
||
} |