zoukankan      html  css  js  c++  java
  • 设计模式之装饰模式(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;
    }
    
  • 相关阅读:
    DP——背包问题(三)
    堆——练习题
    DP——背包问题(二)
    二叉树的后序遍历(暴力版) 小白菜oj 1034
    树状数组2模板 Luogu 3368
    树状数组1模板 Luogu 3374
    DP——最长上升子序列(n^2与n log n)
    线段树(区间修改)模板题 Luogu 2357 守墓人
    c语言学习摘录
    python 学习摘录
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3204590.html
Copyright © 2011-2022 走看看