Decorator模式

作用:
動態地給一個對象添加一些額外的職責。就增加功能來說,Decorator 模式相比生成子類更爲靈活。

 

class Component
{
public:
Component(){}
virtual ~Component(){}
// 純虛函數,由派生類實現
virtual void Operation() = 0;
};
// 抽象基類,維護一個指向Component 對象的指針
class Decorator
: public Component
{
public:
Decorator(Component* pComponent) : m_pComponent(pComponent){}
virtual ~Decorator();
protected:

Component* m_pComponent;
};
// 派生自Component,在這裏表示需要給它動態添加職責的類
class ConcreateComponent
: public Component
{
public:
ConcreateComponent(){}
virtual ~ConcreateComponent(){}
virtual void Operation();
};
// 派生自Decorator,這裏代表爲ConcreateComponent動態添加職責的類
class ConcreateDecorator
: public Decorator
{
public:
ConcreateDecorator(Component* pComponent) : Decorator(pComponent){}
virtual ~ConcreateDecorator(){}
virtual void Operation();
private:
void AddedBehavior();
};

Decorator::~Decorator()
{
delete m_pComponent;
m_pComponent = NULL;
}
void ConcreateComponent::Operation()
{
std::cout << "Operation of ConcreateComponent/n";
}
void ConcreateDecorator::Operation()
{
m_pComponent->Operation();
AddedBehavior();
}
void ConcreateDecorator::AddedBehavior()
{
std::cout << "AddedBehavior of ConcreateDecorator/n";
}

 

int main()
{


// 初始化一個Component對象
Component* pComponent = new ConcreateComponent();
// 採用這個Component對象去初始化一個Decorator對象,
// 這樣就可以爲這個Component對象動態添加職責


Decorator* pDecorator = new ConcreateDecorator(pComponent);
pDecorator->Operation();
delete pDecorator;
system("pause");
return 0;


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章