设计模式-Decorator模式戏说
终于看见组合,不是继承的方式了,早已泪流满面,擦干眼泪往下看,才知道自己又被忽悠了。
此模式针对现有类的扩展功能添加,具体方法:从现有类派生一个接口子类做为隔离层,(又见继承又见抽象,/(*~~*)/),
并且另派生一个扩展子类,最后由接口子类派生出现有类和扩展子类的合成体。
A:现有类
B:扩展子类
C:接口子类
D:合成类
红线表示op函数调用的路径。
class A
{
public:
virtual ~A();
virtual void op();
protected:
A();
}
class B : public A
{
public:
B(); ~B();
void op();
}
class C : public A
{
public:
C(A* a);
virtual ~C();
void op();
protected:
A* _a;
}
class D : public C
{
public:
D(A* a);
~D();
void op();
}
///
A::A(){} A::~A(){} A::op(){}
B::B(){} B::~B(){} void B::op(){/*extend*/}
void C::op(){}
C::C(A* a)
{ this->_a =a;}
C::~C()
{ delete _a;}
D::D(A* a):C(a) {}
D::~D() {}
void D::op()
{
/*A + B*/
_a->op();
}