结构型模式——装饰器模式210927

本文介绍了如何运用装饰器模式解决咖啡系统中添加调料和动态调整价格的问题,以避免类爆炸。装饰器模式允许动态地给对象添加职责,相较于继承更为灵活,同时也是一种‘包装类’。通过组件、实体组件和实体装饰器的实现,可以方便地管理各种咖啡和调料的组合及价格计算。虽然可能会产生较多对象,但能有效避免类的数量过度膨胀。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Decorator(装饰器,Structural Pattern)

问题:点咖啡系统

  • 如果我们要编写一个点咖啡系统
  • 只有四种咖啡的类图如下在这里插入图片描述
  • 如果要给咖啡加调料,而且每一种都要收钱,最后还要算钱,该咋办呢
  • 如果还是搞很多个类,会产生“类爆炸”在这里插入图片描述
  • 我们也可以给父类增加许多方法来避免类爆炸在这里插入图片描述
  • 可是如果我们要改价格或者加新的调料该咋办呢?

装饰器模式

这是啥

  • 一层层剥开你的心
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 简而言之,每新增一种调料就把咖啡用调料装饰,也就是放进调料对象中,增加新的调料就把之前产生的对象放进新的调料
  • 计算价格时只要一层层剥开就好了

为啥

  • 动态添加职责
  • 相比通过继承来添加功能更加灵活
  • 也叫“Wrapper”,包装类
  • 起初是为了方便向GUI中添加组件,所以利用了组合的方式在这里插入图片描述
    在这里插入图片描述

实现

在这里插入图片描述

  • 组件
  • 实体组件
  • 装饰器
  • 实体装饰器
    在这里插入图片描述

优缺点

  • 优点
    • 比静态继承灵活
    • 避免类爆炸
    • 可以创造许多行为
  • 缺点
    • 被装饰的组件和组件本身已经不同了,变成了装饰器的类型
    • 会产生很多对象

咖啡系统的实现

在这里插入图片描述

实例:JAVA I/O

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值