设计模式-装饰者模式

装饰者模式:
动态地将功能附加到对象上, 而不是来一个继承大爆炸.

#include 
   
   
    
    
#include 
    
    
     
     

//drink
class Beverage
{
public:
	Beverage () = default;
	Beverage (string description_) :description (description_) {}
	virtual ~Beverage () = default;
	virtual string get_description ()
	{
		return description;
	}
	virtual double cost () = 0;
protected:
	string description = "Unknow Beverage";
};

class condiment_decorator : public Beverage
{
public:
	virtual string get_description () override = 0;
};

class Espresso : public Beverage
{
public:
	Espresso () :Beverage("Esptrsso") {}
	double cost ()override
	{
		return 1.99;
	}
};

class house_blend : public Beverage
{
public:
	house_blend () :Beverage ("house blend coffee") {}
	double cost ()override
	{
		return 0.89;
	}
};

class Mocha : public condiment_decorator
{
public:
	Mocha (shared_ptr
     
     
      
       beverage_) :beverage (beverage_) {}
	string get_description ()override
	{
		return string (beverage->get_description () + "Mocha");
	}
	double cost ()override
	{
		return 0.2 + beverage->cost ();
	}
private:
	shared_ptr
      
      
       
        beverage;
};

void test ()
{
	shared_ptr
       
       
         beverage1 = make_shared 
        
          (); cout << beverage1->get_description () << " $" << beverage1->cost () << endl; shared_ptr 
         
           beverage2 = make_shared 
          
            (); beverage2 = make_shared 
           
             (beverage2); cout << beverage2->get_description () << " $" << beverage2->cost () << endl; } int main () { ios::sync_with_stdio (false); test (); return 0; } 
            
           
          
         
       
      
      
     
     
    
    
   
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值