相信能来找文章看的同学多半对于装饰者模式不陌生,此处不墨迹直接贴出源码。很容易懂,注释应该也不需要了吧。
#include <iostream>
using namespace std;
class baseClass //基类,基本上是在定义需要被装饰的接口
{
public:
virtual void print(){};
};
class extendedClass:public baseClass //接口的一种实现,同时也是被装饰类引用的对象
{
public:
void print()
{
cout<<"this is in Externedclass!"<<endl;
}
};
class DecoratorClass:public baseClass //装饰类的接口声明,需要继承baseclass,否则就成了包装,没有利用类的多态。
{
public:
baseClass* concretebase;
void setDecoratorClass( baseClass * cb)
{
this->concretebase = cb;
}
virtual void print(){}; //可以不需要,为了可读性,不妨加上
};
class DecoratorClassA:public DecoratorClass
{
public:
DecoratorClassA(baseClass * concretebase)
{
this->concretebase = concretebase;
}
virtual void print()//装饰者模式的核心内容——对原有方法的拓展
{
concretebase->print();//原方法
cout<<"this is in DecoratorClassA!"<<endl;//拓展
};
};
int main()
{
baseClass *d = new DecoratorClassA(new extendedClass()); //直接声明装饰类,利用一个baseclass的扩展类去实例化它
d->print();
return 1;
}