设计模式学习3——装饰者模式(Decorator)
没想到鼻炎还要做手术,这应该是出生到现在的第一个手术吧,据说是个小手术,呵呵,应该没有什么问题吧,不过得有10天左右的手术及休养时间,不知道设计模式的学习会不会被打断,嘿嘿。
装饰者模式
官方解释:……
个人理解:如果要把多个类组合在一起,形成新的对象,除了使用继承然后多态,使用装饰者模式更加合适,不过据说这样的话,会出现很多的小类,导致代码的可理解性变差……
小实例: 技术支持中心的“老成员”们都有一起吃鸡蛋炒拉面的经历,这不,拉面店的老板要把他的生意“信息化、自动化”。拉面店大约有三四十种拉面吧,其中拉面都是一样的,只不过放进的佐料不同而已,比如:牛肉炒拉面、鸡蛋炒碰面等等。这情形最适合装饰者模式了。 画个图吧

上面的图是HeadFirst电子书里的,自己偷了个小懒,没有重新去画,于是上面的图只是介绍装饰者模式的,和下面的代码原理一样,不过不是下面代码的类图:
package component;

public class Lamian extends Mian {

public float UseTime() {
return 30;
}

}
//-------下面是另一个文件了,这就是component


package component;

public abstract class Mian {
String name;
public String getName() {
return name;
}
public abstract float UseTime();
}
装饰者们的代码:
装饰者
测试一下吧:
测试
测试结果截图:

装饰者模式
官方解释:……
个人理解:如果要把多个类组合在一起,形成新的对象,除了使用继承然后多态,使用装饰者模式更加合适,不过据说这样的话,会出现很多的小类,导致代码的可理解性变差……
小实例: 技术支持中心的“老成员”们都有一起吃鸡蛋炒拉面的经历,这不,拉面店的老板要把他的生意“信息化、自动化”。拉面店大约有三四十种拉面吧,其中拉面都是一样的,只不过放进的佐料不同而已,比如:牛肉炒拉面、鸡蛋炒碰面等等。这情形最适合装饰者模式了。 画个图吧

上面的图是HeadFirst电子书里的,自己偷了个小懒,没有重新去画,于是上面的图只是介绍装饰者模式的,和下面的代码原理一样,不过不是下面代码的类图:






















装饰者们的代码:

测试一下吧:

测试结果截图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!