Decorator(装饰器,Structural Pattern)
问题:点咖啡系统
- 如果我们要编写一个点咖啡系统
- 只有四种咖啡的类图如下

- 如果要给咖啡加调料,而且每一种都要收钱,最后还要算钱,该咋办呢
- 如果还是搞很多个类,会产生“类爆炸”

- 我们也可以给父类增加许多方法来避免类爆炸

- 可是如果我们要改价格或者加新的调料该咋办呢?
装饰器模式
这是啥
- 一层层剥开你的心




- 简而言之,每新增一种调料就把咖啡用调料装饰,也就是放进调料对象中,增加新的调料就把之前产生的对象放进新的调料
- 计算价格时只要一层层剥开就好了
为啥
- 动态添加职责
- 相比通过继承来添加功能更加灵活
- 也叫“Wrapper”,包装类
- 起初是为了方便向GUI中添加组件,所以利用了组合的方式


实现

- 组件
- 实体组件
- 装饰器
- 实体装饰器

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

实例:JAVA I/O



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

被折叠的 条评论
为什么被折叠?



