1. 装饰者模式
装饰者模式是为已有的实体动态地添加更多功能的一种设计模式。装饰者模式将每一个单独的功能都封装在单独的派生类当中,并且让这个类包装所需要装饰的对象;
装饰者模式可以区分核心职责与装饰功能,简化原有的类;
1)装饰类中存储着一个指针,指向要装饰的对象;
2)装饰类同时又继承自要装饰的对象;这样在加糖的派生类看来,加了冰的茶依旧是茶;
class Tea {
public:
Tea(const string& str) :name(str) {}
Tea(const Tea& t):name(t.name) {}
virtual void show() {
cout << "name:" << name << endl;
}
private:
string name;
};
class Decorate :public Tea {
public:
Decorate(Tea *t) :Tea(*t), tea(t) {}//实际上没有用到派生类的基类部分
virtual void show() {
tea->show();
}
protected:
Tea *tea;//指向要添加对象
};
class Ice :public Decorate {
public:
Ice(Tea *t) :Decorate(t) {}
virtual void show() {
tea->show();
cout << "add ice" << endl;
}
};
class Sugar :public Decorate {
public:
Sugar(Tea* t) :Decorate(t) {}
virtual void show() {
tea->show();
cout << "add sugar" << endl;
}
};
int main() {
Tea *t = new Tea("Green Tea");
Tea *a1 = new Ice(t);
Tea *a2 = new Sugar(a1);
a2->show();
return 0;
}