/*Decorator.h*/
#ifndef DECORATOR
#define DECORATOR
class Component
{
public:
virtual ~Component();
virtual void Operation();
protected:
Component();
private:
};
class ConcreteComponent:public Component
{
public:
Decorator(Component *com);
virtual ~Decorator();
void Operation();
protected:
Component *com_;
private:
};
class ConcreteDecorator:public Decorator
{
public:
ConcreteDecorator(Component *com);
~ConcreteDecorator();
void Operation();
void AddedBehavior();
protected:
};
#endif
/*Decorator.cpp*/
#include "Decorator.h"
#include <iostream>
Component::Component()
{
}
Component::~Component()
{
}
void Component::Operation()
{
}
ConcreteComponent::ConcreteComponent()
{
}
ConcreteComponent::~ConcreteComponent()
{
}
void ConcreteComponent::Operation()
{
std::cout<<"ConcreteComponent"<<std::endl;
}
Decorator::Decorator(Component *com)
{
com_=com;
}
Decorator::~Decorator()
{
}
void Decorator::Operation()
{
}
ConcreteDecorator::ConcreteDecorator(Component *com):Decorator(com)
{
}
ConcreteDecorator::~ConcreteDecorator()
{
}
void ConcreteDecorator::AddedBehavior()
{
std::cout<<"AddedBehavior..."<<std::endl;
}
void ConcreteDecorator::Operation()
{
com_->Operation();
this->AddedBehavior();
}
/*main.cpp*/
#include "Decorator.h"
int main()
{
Component *com=new ConcreteComponent();
Decorator *dec=new ConcreteDecorator(com);
dec->Operation();
return 0;
}
原文地址:http://blog.csdn.net/tlzhatao/article/details/45644619