SpringBoot日常:装饰器模式应用 我会带着你远行 2024-02-17 09:30 45阅读 0赞 #### 文章目录 #### * * 前言 * 1、什么是装饰器模式? * 2、装饰器模式的结构 * 3、装饰器模式的实现 * * 创建一个粉类的抽象构建Component * 创建一个肠粉类的具体构建Component * 创建一个装饰角色Decorator的抽象类 * 创建一个具体装饰角色ConcreteDecorator的实现类 * 接口调用测试 ### 前言 ### 对于很多程序员,平时写代码为了方便,可能一股脑就按面向过程那样一下把业务逻辑编写下来,少有会去额外思考设计模式或者算法。这种情况其实不利于我们的编码维护,在本文,将介绍设计模式中的观察者模式,通过本文的介绍将帮助你快速理解和应用。 ### 1、什么是装饰器模式? ### 装饰器模式是一种结构型设计模式,是在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式 ### 2、装饰器模式的结构 ### 装饰器模式包括以下几个角色: **(1)抽象构建Component** 定义了被装饰对象的接口或抽象类,也是所有具体组件的共同父类 **(2)具体构建ConcreteComponent** 实现了Component接口的具体对象,是被装饰对象的基本实现 **(3)装饰角色Decorator** 保持一个指向Component对象的引用,并定义与Component接口一致的接口。 Decorator还可以维护一个装饰器链,以便动态地添加和删除装饰器对象 **(4)具体装饰角色ConcreteDecorator** 通过添加一些额外的行为来扩展Component对象的功能,它们实现了Decorator接口并且具有被装饰对象的引用。 ### 3、装饰器模式的实现 ### 假设我们去早餐店购买肠粉,需要给每份肠粉添加不同的配菜,我们可以使用装饰器模式来动态添加配料,而无需为每种可能 的配料创建一个子类。 #### 创建一个粉类的抽象构建Component #### //抽象构建 public interface Powder { //价格 BigDecimal getCost(); //描述 String getDesc(); } #### 创建一个肠粉类的具体构建Component #### //具体构建ConcreteComponent public class RollPowder implements Powder{ @Override public BigDecimal getCost() { return new BigDecimal("4.0"); } @Override public String getDesc() { return "斋粉"; } } #### 创建一个装饰角色Decorator的抽象类 #### //Decorator abstract class PowderDecorator implements Powder{ private BigDecimal price = BigDecimal.ZERO; protected final Powder decoratedPowder; public PowderDecorator(Powder powder){ this.decoratedPowder = powder; } @Override public BigDecimal getCost(){ return decoratedPowder.getCost(); } @Override public String getDesc(){ return decoratedPowder.getDesc(); } } #### 创建一个具体装饰角色ConcreteDecorator的实现类 #### 该类装饰是加鸡蛋 public class EggDecorator extends PowderDecorator { private BigDecimal price = new BigDecimal(1); public EggDecorator(Powder powder) { super(powder); } @Override public BigDecimal getCost() { return super.getCost().add(price); } @Override public String getDesc() { return super.getDesc() + ",加蛋"; } } #### 接口调用测试 #### @GetMapping(value = "/decorator", produces = MediaType.APPLICATION_JSON_VALUE) public void decorator() { Powder powder = new RollPowder(); powder = new EggDecorator(powder); System.out.println(powder.getCost()); System.out.println(powder.getDesc()); } ![在这里插入图片描述][8805931d04044a36b77031bad62239a8.png] [8805931d04044a36b77031bad62239a8.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/02/06/206ab30b2a8248e0bf06399393a5effc.png
相关 SpringBoot日常:模板方法模式应用 文章目录 前言 1、什么是模板模式? 2、模板模式的结构 3、模板模式的实现 创建模板父类 约定不等于承诺〃/ 2024年02月17日 09:53/ 0 赞/ 116 阅读
相关 SpringBoot日常:适配器模式应用 文章目录 前言 1、什么是适配器模式? 2、适配器模式的结构 3、适配器模式的实现 原接口类的实 灰太狼/ 2024年02月17日 09:32/ 0 赞/ 115 阅读
相关 SpringBoot日常:装饰器模式应用 文章目录 前言 1、什么是装饰器模式? 2、装饰器模式的结构 3、装饰器模式的实现 创建一个粉类 我会带着你远行/ 2024年02月17日 09:30/ 0 赞/ 46 阅读
相关 SpringBoot日常:观察者模式应用 文章目录 前言 1、什么是观察者模式? 2、观察者模式的结构 3、观察者模式的实现 创建一个主题 冷不防/ 2024年02月17日 09:27/ 0 赞/ 94 阅读
相关 SpringBoot日常:策略模式应用 文章目录 前言 1、什么是策略模式? 2、策略模式的结构 3、策略模式的应用例子 创建一个支付处 拼搏现实的明天。/ 2024年02月17日 09:12/ 0 赞/ 92 阅读
相关 装饰器模式 装饰器模式 <?php class BaseArticle{ protected $art = null; protected 我会带着你远行/ 2022年07月21日 01:28/ 0 赞/ 278 阅读
相关 装饰器模式 1 <?php 2 //装饰器模式-在不改变原有类的结构上,对类的功能那个作补充 3 4 //武器基类 5 abstract 秒速五厘米/ 2022年06月16日 00:00/ 0 赞/ 278 阅读
相关 装饰器模式应用--动态规则引擎 装饰器模式应用于动态功能添加,将功能实现分布于不同的组件,代码扩展能力强。 先从网上寻找示例,为英雄联盟里面的英雄添加技能,类图如下: 深碍√TFBOYSˉ_/ 2022年05月27日 09:55/ 0 赞/ 251 阅读
相关 装饰器模式 ![5057999-ef364c6262961125.png][] image.png 意图: 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模 超、凢脫俗/ 2021年09月12日 02:16/ 0 赞/ 481 阅读
相关 装饰器模式 饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种... 小灰灰/ 2020年06月13日 05:56/ 0 赞/ 861 阅读
还没有评论,来说两句吧...