design_patterns/10_decorator.cpp
Yuki 9f29b7a6ff
feat: Decorator
Implemented a demo for the Decorator.
2025-04-12 03:01:38 +08:00

52 lines
993 B
C++

#include <iostream>
#include <memory>
using namespace std;
class Coffee {
public:
virtual void make() = 0;
virtual ~Coffee() = default;
};
class SimpleCoffee : public Coffee {
public:
virtual void make() override {
cout << "Coffee";
}
};
class MilkDecorator : public Coffee {
unique_ptr<Coffee> coffee;
public:
MilkDecorator(unique_ptr<Coffee> c) : coffee(move(c)) {
}
virtual void make() override {
coffee->make();
cout << " + Milk";
}
};
class SugarDecorator: public Coffee {
unique_ptr<Coffee> coffee;
public:
SugarDecorator(unique_ptr<Coffee> c) : coffee(move(c)) {
}
virtual void make() override {
coffee->make();
cout << " + Sugar";
}
};
int main() {
auto coffee = make_unique<SimpleCoffee>();
auto milk_coffee = make_unique<MilkDecorator>(move(coffee));
auto sugar_coffee = make_unique<SugarDecorator>(move(milk_coffee));
sugar_coffee->make();
cout << endl;
}