装饰模式(大话设计模式例子C++实现)

本文介绍了装饰模式的概念和优势,通过电脑配件和人穿衣搭配的实例,展示了如何使用C++实现装饰模式。文章详细阐述了Component、ConcreteComponent、Decorator和ConcreteDecorator的角色,并提供了具体代码实现,包括DellComputer、DecoratorA和DecoratorB的装饰过程,以及人穿衣搭配的装饰类应用。
摘要由CSDN通过智能技术生成

1 概述

装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能。比如有一个电脑(人),允许你为电脑添加特性,比如添加键盘、鼠标垫等(穿衣服)。一种灵活的设计方式是,将电脑(人)嵌入到另一对象中,由这个对象完成特性的添加,我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。下面给出装饰模式的UML图。
在这里插入图片描述

  • Component是定义一个对象接口,可以给这些对象动态的添加职责
  • ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责
  • Decorator抽象装饰类,继承了Component,从外类来扩展Component类的功能,但对于Component来说,是无序知道Decorator的存在的
  • ConcreteDecorator是具体的装饰类,起到给Component添加职责的功能
  • 如果只有一个ConcreteComponent类而没有抽象的类,那么Decorator可以是ConcreteComponent的一个子类。
  • 同样,如果只有一个ConcreteComponent类,那么没有必要建立一个单独的Decorator 类,而可以把Decorator和ConcreteComponent的责任合成一个类
  • 装饰的方法是:首先用ConcreteComponent实例化一个对象C,然后用ConcreteComponentA实例化一个对象d1来包装 C,再用ConcreteComponentB实例化一个对象d2来包装 d1,最后执行d2的Operation()

2 电脑配件实现

请添加图片描述

在这种设计中,电脑(人)的装饰功能被独立出来,可以单独发展,进而简化了具体电脑类的设计。下面给出类的实现:

//公共抽象类
class Computer
{
   
public:
	Computer() {
   }
	virtual ~Computer() {
   }
	virtual void ShowDecorate() {
   }
};
//具体的电脑类
class DellComputer : public Computer
{
   
private:
	string m_name; //电脑名称
public:
	DellComputer(string name): m_name(name){
   }
	~DellComputer() {
   }
	virtual void ShowDecorate() {
    cout<<m_name<<"的装饰"<<endl;}//virtual可写可不写
};
//装饰类
class DecoratorComputer : public Computer
{
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值