装饰模式,

   动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

// Decorator.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class IComponent
{
public:
 virtual void process() = 0;

};

class Component : public IComponent
{
public:
 virtual void process()
 {
  cout<<"Component process"<<endl;
 }
};

class Decorator: public IComponent
{
public:
 virtual void process()
 {
  if ( !myComponent)
   myComponent->process();
 }
 virtual void setComponent( IComponent *component )
 {
  myComponent = component;
 }
 ~Decorator()
 {
  if (myComponent)
   delete myComponent;
 }
protected:
 IComponent *myComponent;
};

class ConcreateDecoratorA: public Decorator
{
public:
 virtual void process()
 {
  myComponent->process();
  cout<<"ConcreateDecoratorA process"<<endl;
 }
};

class ConcreateDecoratorB: public Decorator
{
public:
 virtual void process()
 {
  myComponent->process();
  cout<<"ConcreateDecoratorB process"<<endl;
 }
};

int _tmain(int argc, _TCHAR* argv[])
{
 Component *pComponent = new Component();

 ConcreateDecoratorA *pDecoratorA = new ConcreateDecoratorA();
 ConcreateDecoratorB *pDecoratorB = new ConcreateDecoratorB();

 pDecoratorA->setComponent( pComponent );
 pDecoratorA->process();

 pDecoratorB->setComponent( pDecoratorA );
 pDecoratorB->process();

 system("pause");
 return 0;
}

 

posted on 2011-12-01 17:31  Just a Programer  阅读(217)  评论(0编辑  收藏  举报