装饰者模式动态地将责任附加到对象上, 如果要扩展功能, 装饰者模式提供了比继承更有弹性的替代方案.
装饰者模式有一群装饰者类, 这些类包装具体的类组件
#ifndef Decorator_h
#define Decorator_h
class Component // 公共抽象类
{
public:
virtual void method() = 0;
};
class ConcreteComponent : public Component // 具体的类
{
public:
virtual void method()
{
printf("ConcreteComponent method.\n");
}
};
class Decorator : public Component // 装饰类
{
public:
virtual void method()
{
printf("Decorator method.\n");
}
};
class ConcreteDecoratorA : public Decorator // 具体的装饰类A
{
public:
ConcreteDecoratorA(Component *c) : component(c) { }
virtual void method()
{
printf("ConcreteDecoratorA method.\n");
component->method();
}
private:
Component *component;
};
class ConcreteDecoratorB : public Decorator // 具体的装饰类B
{
public:
ConcreteDecoratorB(Component *c) : component(c) { }
virtual void method()
{
printf("ConcreteDecoratorB method.\n");
component->method();
}
private:
Component *component;
};
#endif
#include <iostream>
#include "Decorator.h"
int main(int argc, char **argv)
{
Decorator d;
ConcreteDecoratorA a(&d);
ConcreteDecoratorB b(&a);
b.method();
return 0;
}