装饰模式----C++实现
来源:互联网 发布:网络保密承诺书样本 编辑:程序博客网 时间:2024/04/28 11:39
装饰模式
定义:
动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。
适用性:
1、 在不影响其他对象的情况下,以动态,透明的方式给单个对象添加职责。
2、 处理那些可以撤销的职责
3、 当不能采用生成子类的方法扩充是。
优点:
1、 比静态继承更灵活
2、 避免在层次结构高层的类有太多的特征
结构:
实现:
class Component
{
public:
Component(){};
virtual~Component(){};
virtual void doSomething() = 0;
};
class A:public Component
{
public:
voiddoSomething(){}
protected:
private:
};
class ConcreteComponent:public Component
{
public:
ConcreteComponent(){}
~ConcreteComponent(){}
voiddoSomething()
{
cout<<"ConcreteComponent doSomething"<<endl;
}
};
class Decorator:public Component
{
public:
Decorator(Component*pcomponent):m_pComponent(pcomponent)
{ }
~Decorator(){}
//直接调用被装饰组件
voiddoSomething()
{
m_pComponent->doSomething();
}
private:
Component *m_pComponent;
};
//给ConcreteComponent添加了额外的状态
class ConcreteDecoratorA:public Decorator
{
public:
ConcreteDecoratorA(Component*pcomponent,string name):Decorator(pcomponent),m_name(name)
{ }
~ConcreteDecoratorA(){}
voiddoSomething()
{
cout<<"ConcreteComponent name :"<<m_name<<endl;
Decorator::doSomething();
}
private:
//额外的状态
string m_name;
};
//给ConcreteComponent添加了额外的操作
class ConcreteDecoratorB:public Decorator
{
public:
ConcreteDecoratorB(Component*pcomponent):Decorator(pcomponent)
{ }
~ConcreteDecoratorB(){}
voiddoSomething()
{
doAdditionalThing();
Decorator::doSomething();
}
private:
//额外的职责
voiddoAdditionalThing()
{
cout<<"ConcreteDecoratorB doAdditionalThing "<<endl;
}
};
Component *pcom = new ConcreteComponent;
Decorator *pa = newConcreteDecoratorA(pcom,"componentA");
Decorator *pb = newConcreteDecoratorB(pcom);
pa->doSomething();
pb->doSomething();
实现中最重要的一点就是,装饰对象和被装饰的组件的接口是一致的。如果有多个装饰类,则所有的装饰类必须有一个公共的父类。
- 装饰模式(c++)
- 【C++】Chapter3:装饰模式
- Objective C--装饰模式
- Objective C 装饰模式
- 装饰者模式(c++)
- 装饰模式 C#
- 【C++】装饰器模式
- 装饰模式(C++)
- 装饰模式C++实现
- 装饰模式c++实现
- 装饰模式 C++实现
- 装饰模式C++实现
- 装饰模式lua实现
- 装饰模式----C++实现
- 装饰模式--lua实现
- PHP实现装饰模式
- 装饰模式C++实现
- 装饰模式的简单实现(C#)内有图一张,嘿嘿.....
- Unicode编码:保存二进制图片
- was mutated while being enumerated.
- 南阳 116 士兵杀敌(二)
- 2013:“野蛮”的智能硬件
- Linux 内核系统电子书下载
- 装饰模式----C++实现
- hdu 1166 敌兵布阵
- SharePoint 2010 恢复已经被删掉的站点集
- 对数组进行复制的方法
- java控制循环结构day_5
- 启用OMNI补全功能
- 我的2013年终总结——在苦与乐中成长
- hdu 2036 改革春风吹满地
- 疯狂的Web应用开源项目