java设计模式之装饰器模式
装饰器模式和代理模式非常相似,都是用来增强原始类的功能,只不过代理类增加了是业务逻辑之外无关的的功能。
装饰器是在基础功能上的继续增强相关的功能。
我们通过一个一个画笔的设计,通过装饰器模式给画笔添加新功能
首先定义了一个抽象类
public abstract class Pen { public abstract void draw(); }
其次我们定义一个铅笔类
/** * 普通的铅笔 */ public class Pencil extends Pen{ @Override public void draw() { System.out.println("Pencil.draw()"); } }
单纯一个铅笔也画不好一幅画,如果能有多个彩色铅笔就更好了
/** * 给铅笔新增加了颜色功能 */ public class ColorDecorator extends Pen{ protected Pen pen; public ColorDecorator(Pen pen) { this.pen = pen; } @Override public void draw() { System.out.print("RedColor "); pen.draw(); } }
有颜色挺好,如果线条的粗细可以调整就更好了,那我们在给铅笔装饰一个线条粗细的功能
/** * 给铅笔新增了线条宽度的功能 */ public class WidthDecorator extends Pen{ protected Pen pen; public WidthDecorator(Pen pen) { this.pen = pen; } @Override public void draw() { System.out.print("Width "); pen.draw(); } }
OK,这下就可以开始画画了
public class Board { public static void main(String[] args) { Pencil pencil = new Pencil(); pencil.draw(); ColorDecorator colorDecorator = new ColorDecorator(pencil); colorDecorator.draw(); WidthDecorator widthDecorator = new WidthDecorator(colorDecorator); widthDecorator.draw(); } }
我们既可以使用普通的铅笔画画,也可以不断添加新的功能。
输出:
Pencil.draw()
RedColor Pencil.draw()
Width RedColor Pencil.draw()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗