设计模式-装饰者模式

模式定义#

动态的将新功能附加到对象上,在对象功能扩展方面,它比继承更有弹性。

设计原则#

  1. 多用组合,少用继承
  2. 类应设计的对扩展开放,对修改关闭。

UML类图#

image

装饰者模式实例#

先写一个被装饰者食物的类

被装饰者-食物类

Copy
package com.wpx.decorator; /** * 被装饰者-食物类 */ public class Food { private String foodName; public Food() { } public Food(String foodName) { this.foodName = foodName; } public String make() { return foodName; } }

再定义几个装饰者类

装饰者-面包类

Copy
package com.wpx.decorator; /** * 装饰者-面包类 */ public class Bread extends Food { private Food food; public Bread(Food food){ this.food=food; } public String make(){ return food.make()+"+面包"; } }

装饰者-奶油类

Copy
package com.wpx.decorator; /** * 装饰者-奶油类 */ public class Cream extends Food { private Food food; public Cream(Food food) { this.food = food; } public String make() { return food.make() + "+奶油"; } }

装饰者-蔬菜类

Copy
package com.wpx.decorator; /** * 装饰者-蔬菜类 */ public class Vegetable extends Food { private Food food; public Vegetable(Food food) { this.food = food; } public String make() { return food.make() + "+蔬菜"; } }

测试装饰者模型

Copy
package com.wpx.decorator; public class DecoratorDemo { public static void main(String[] args) { Food food = new Bread(new Vegetable(new Cream(new Food("香肠")))); System.out.println(food.make()); } }

运行结果

Copy
香肠+奶油+蔬菜+面包 Process finished with exit code 0

这就相当于生活当中制作三明治的过程,我们先加一根香肠,再香肠上抹上一层奶油,再加上几片蔬菜,最后拿面包夹上。

java.io中的装饰者模式#

image

总结#

装饰者模型就是动态地添加更多功能的一种方式,是一种组合和委托的思想,但是会导致设计中出现许多小类,如果过度使用,会让程序变得很复杂,难以看明白。

posted @   武培轩  阅读(1022)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
CONTENTS