简介
装饰模式:
动态的给一个对象添加一些额外的职责,就增加功能而言,装饰模式比生成子类更加灵活。
常用的场景
如果需要添加新功能,但又不想修改定义好的接口或者抽象类,那么这时候就比较适合装饰模式,例如很多图形系统中的组件,就可以使用装饰模式,来让新的组件在继承现在功能的基础上添加新的功能。
装饰模式一般是针对接口或者抽象类的变化,如果是具体实现类的变化,则要考虑适用哪种模式。
优点
1.可以不用修改原有的接口,就可以实现新功能的添加。
2.装饰者可以很方便的转换原有接口中的实现,可以给装饰者指定不同的装饰类实现不同的功能。
缺点
1.复杂性增加,装饰者模式会导致许多小类的产生。
测试代码
#include <iostream>
using namespace std;
//基类
class BasePhone
{
public:
BasePhone(){};
~BasePhone(){};
virtual void call(){};
virtual void context(){};
};
//继承类
class iPhone :public BasePhone
{
public:
iPhone(){};
~iPhone(){};
virtual void call(){};
virtual void context(){};
private:
void showGoodSize(){};
};
//装饰模式
class DetachPhone : public BasePhone
{
public:
DetachPhone( BasePhone* phone ):m_pPhone(phone){};
~DetachPhone(){};
virtual void call(){};
virtual void context(){};
public:
BasePhone* m_pPhone;
public:
void DetachPsdahone(){};// 装饰函数
};
void main()
{
BasePhone* pHone = new BasePhone();
DetachPhone* m_pPhone = new DetachPhone(pHone);
system("PAUSE");
}