装饰模式
用来修饰作用
// 组件
class component
{
public:
component() {}
virtual ~component() {}
public:
virtual void operation() {
}
};
// 装饰器
class decorator: public component
{
public:
explicit decorator(component* subject) :subject(subject) {}
virtual ~decorator() {}
public:
virtual void operation() {
if (subject != NULL) {
subject->operation();
}
}
protected:
component* subject;
};
// 天气
class weather:public component
{
public:
weather() {}
~weather() {}
public:
virtual void operation() {
cout << "天气" << endl;
}
};
// 好天气装饰器
class fineWeather:public decorator
{
public:
fineWeather(component* subject):decorator(subject) {}
virtual ~fineWeather() {}
public:
virtual void operation() {
this->fine();
decorator::operation();
}
private:
void fine() {
cout << "阳光明媚的";
}
};
// 坏天气装饰器
class badWeather :public decorator
{
public:
badWeather(component* subject) :decorator(subject) {}
virtual ~badWeather() {}
public:
virtual void operation() {
this->fine();
decorator::operation();
}
private:
void fine() {
cout << "风雪交加的";
}
};
int test_decorator() {
weather* weather_ = new weather();
fineWeather* fineWeather_ = new fineWeather(weather_);
badWeather* badWeather_ = new badWeather(weather_);
fineWeather_->operation();
badWeather_->operation();
delete fineWeather_;
delete badWeather_;
delete weather_;
}