装饰模式是一种经典的类功能扩展模式,其精髓在装饰类使用继承加聚合的方式获得接口和要实现对象,然后通过自己实现扩展接口
作用
装饰模式通过装饰类动态地将责任附加到对象上,若要扩展功能,无需通过继承增加子类就能扩展对象的新功能,提供了比继承更有弹性的替代方案,避免了子类数量膨胀带来的系统臃肿。
类视图
代码实现
class Component{
public: Component(){
}
virtual ~Component(){
}
virtual void operation() = 0;
}
;
class ConcreteComponentA : public Component{
public: ConcreteComponentA(){
}
~ConcreteComponentA(){
}
void operation() {
fprintf(stderr, "ConcreteComponentA's operation!n");
}
}
;
class ConcreteComponentB : public Component{
public: ConcreteComponentB(){
}
~ConcreteComponentB(){
}
void operation() {
fprintf(stderr, "ConcreteComponentB's operation!n");
}
}
;
class Decorator : public Component{
public: Decorator() :mComponent(NULL){
}
virtual ~Decorator(){
}
virtual void operation() {
if (mComponent) mComponent->operation();
}
virtual void setComponent(Component* pComponent) {
mComponent = pComponent;
}
protected: Component* mComponent;
}
;
class ConcreteDecoratorE : public Decorator{
public: ConcreteDecoratorE ();
virtual ~ConcreteDecoratorE ();
virtual void addBehavior() {
mComponent->operation();
fprintf(stderr, "ConcreteDecoratorE's addBehavior!n");
}
}
;
class ConcreteDecoratorF : public Decorator{
public: ConcreteDecoratorF ();
virtual ~ConcreteDecoratorF ();
virtual void addBehavior() {
operation();
fprintf(stderr, "ConcreteDecoratorF's addBehavior!n");
}
}
;
int main(){
ConcreteComponentB *pComponent = new ConcreteComponentB();
ConcreteDecoratorF decorator;
decorator.setComponent(pComponent);
decorator.addBehavior();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- 深入剖析设计模式中的组合模式应用及在C++中的实现
- C++设计模式之组合模式
- C++设计模式之享元模式(Flyweight)
- C++设计模式之策略模式(Strategy)
- C++设计模式之模板方法模式(TemplateMethod)
- C++设计模式之观察者模式(Observer)
- C++设计模式之迭代器模式(Iterator)
- C++设计模式之适配器模式(Adapter)
- C++设计模式之建造者模式(Builder)
- C++设计模式之组合模式(Composite)