• 设计模式之装饰模式(Decorator)


    装饰模式原理:给对象增加特性,这种特性是一种累加的效果

    代码如下

    #include <iostream>
    #include <string>
    #include <list>
    using namespace std;
    
    
    /************************************************************************/
    /* 装饰模式的作用是为对象增加属性										*/
    /************************************************************************/
    class Phone
    {
    public:
    	Phone(string name):m_name(name)
    	{
    
    	}
    	Phone()
    	{
    
    	}
    	virtual void show(){}
    protected:
    	string m_name;
    };
    
    class IPhone:public Phone
    {
    public:
    	IPhone(string name):Phone(name)
    	{
    
    	}
    	virtual void show(){cout << m_name << "的装饰" <<endl;}
    };
    class HTCPhone:public Phone
    {
    public:
    	HTCPhone(string name):Phone(name)
    	{
    		
    	}
    	virtual void show(){cout << m_name << "的装饰" <<endl;}
    };
    
    class DecoratorPhone:public Phone
    {
    public:
    	DecoratorPhone(Phone *pPhone)
    	{
    		m_pPhone = pPhone;
    	}
    	virtual void show()
    	{
    		m_pPhone->show();
    	}
    protected:
    	Phone *m_pPhone;
    };
    class DecoratorPhoneA:public DecoratorPhone
    {
    public:
    	DecoratorPhoneA(Phone *pPhone):
    	  DecoratorPhone(pPhone)
    	{
    
    	}
    	virtual void show()
    	{
    		DecoratorPhone::show();
    		cout << "挂饰" <<endl;
    	}
    };
    class DecoratorPhoneB:public DecoratorPhone
    {
    public:
    	DecoratorPhoneB(Phone *pPhone):DecoratorPhone(pPhone){}	
    	virtual void show()
    	{
    		DecoratorPhone::show();
    		cout << "贴膜" <<endl;
    	}
    };
    
    int main()
    {
     Phone *iphone = new IPhone("iphone4s");
     Phone *dpa = new DecoratorPhoneA(iphone);
     Phone *dpb = new DecoratorPhoneB(dpa);
     dpb->show();
    
    	
    	return 0;
    }
    
  • 相关阅读:
    Medium | LeetCode 179. 最大数 | 排序
    Medium | LeetCode 448. 找到所有数组中消失的数字 | 原地Hash
    Medium | LeetCode 78. 子集 | 回溯
    Medium | LeetCode 39. 组合总和 | 回溯
    js上传头像进行图片压缩
    js 点击按钮复制文本
    eclipse下载
    gulp打包修改配置文件
    vuejs之过滤器(filters)的使用
    关于layui弹出层关闭之后,弹出的dom显示问题
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3204590.html
Copyright © 2020-2023  润新知