设计模式-装饰者模式
模式定义#
动态的将新功能附加到对象上,在对象功能扩展方面,它比继承更有弹性。
设计原则#
- 多用组合,少用继承
- 类应设计的对扩展开放,对修改关闭。
UML类图#
装饰者模式实例#
先写一个被装饰者食物的类
被装饰者-食物类
package com.wpx.decorator;
/**
* 被装饰者-食物类
*/
public class Food {
private String foodName;
public Food() {
}
public Food(String foodName) {
this.foodName = foodName;
}
public String make() {
return foodName;
}
}
再定义几个装饰者类
装饰者-面包类
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()+"+面包";
}
}
装饰者-奶油类
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() + "+奶油";
}
}
装饰者-蔬菜类
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() + "+蔬菜";
}
}
测试装饰者模型
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());
}
}
运行结果
香肠+奶油+蔬菜+面包
Process finished with exit code 0
这就相当于生活当中制作三明治的过程,我们先加一根香肠,再香肠上抹上一层奶油,再加上几片蔬菜,最后拿面包夹上。
java.io中的装饰者模式#
总结#
装饰者模型就是动态地添加更多功能的一种方式,是一种组合和委托的思想,但是会导致设计中出现许多小类,如果过度使用,会让程序变得很复杂,难以看明白。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?