装饰者模式

装饰者模式


       说真的,写了4年多的C++,因为都是通讯协议栈和服务器,业务比较少,类用的比较少,而且之间的关系都是简单的关联,依赖,聚合,所以很不理解装饰者,其实是还没有真的理解OOP吧,这也是一直没有信心担任PL的原因,都是用C++来写C,每个功能都是一个Function(). 而好不容易有一个业务多一些的项目,缺因为加入的晚,几乎是在现有框架下派生子类,加代码。 

       

     装饰者模式(Decorator Pattern),是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
     代码是抄别人的,暂时这样吧。总算是表面上理解了。

class Phone

{
public:
Phone()
{


}
virtual ~Phone()
{


}
virtual void ShowDecorate() {} 
public:
string m_strName;
};


//具体的手机类  
class NokiaPhone : public Phone  
{  
public:
NokiaPhone(string strName, int iValue) : m_name(strName), m_iValue(iValue)
{


}
~NokiaPhone()
{


}
private:  
string m_name;  
public:
int m_iValue;
void ShowDecorate() 

cout<<m_name<<"的装饰"<<endl;
}  
};


class DecoratorPhone : public Phone
{
public:
DecoratorPhone(Phone *pPhone) : m_pPhone(pPhone)
{


}
private:


Phone *m_pPhone;
public:
void ShowDecorate()
{
m_pPhone->ShowDecorate();
}


};


class DecoratorPhoneA : public DecoratorPhone
{
public:
DecoratorPhoneA(Phone *pPhone) : DecoratorPhone(pPhone)
{


}


virtual void ShowDecorate()
{
DecoratorPhone::ShowDecorate();
AddDecorate();
}
private:
void AddDecorate()

cout<<"屏幕贴膜"<<endl;
} //增加的装饰  


};




class DecoratorPhoneB : public DecoratorPhone
{
public:
DecoratorPhoneB(Phone *pPhone) : DecoratorPhone(pPhone)
{


}


virtual void ShowDecorate()
{
DecoratorPhone::ShowDecorate();
AddDecorate();
}
private:
void AddDecorate()

cout<<"添加卡通手机外壳"<<endl;
} //增加的装饰  


};


int main()
{


Phone *pPhone = new NokiaPhone("6800", 2000);
DecoratorPhoneA *pDecPhoneA = new DecoratorPhoneA(pPhone);
DecoratorPhoneB *pDecPhoneB = new DecoratorPhoneB(pDecPhoneA);
pDecPhoneB->ShowDecorate();
char c;
cin >> c;
return 0;


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值