概念:动态地将责任附加到对象上。(想要扩展功能,提供有别于继承的另一种选择(避免类爆炸))
设计原则:开关-关闭原则(对扩展开放,对修改关闭)
代码:
class base
{
public:
return_type Cal();
void Display();
};
class A : public base
{
A(base ba)
{
m_ba = ba;
}
return_type Cal()
{
// 附加A类功能处,根据情况调用父类
return m_ba.Cal() + A类处理结果
}
void Display();
base m_ba;
}
class B : public base
{
B(base ba)
{
m_ba = ba;
}
return_type Cal()
{
// 附加B类功能处,根据情况调用父类
return m_ba.Cal() + B类处理结果
}
void Display();
base m_ba;
}
class C : public base
{
...
}
void how_to_used()
{
base ba = new base; // 拥有基本功能
ba = new A(ba); // 附加A功能
ba = new C(ba); // 附加C功能,现有A、 C和基本功能
}
缺点:
1、多层装饰时,效率低
2、若有对特定组件装饰,应用到一般中会有问题