当前位置: 首页 > news >正文

JAVA设计模式——(六)装饰模式(Decorator Pattern)

JAVA设计模式——(六)装饰模式(Decorator Pattern)

  • 介绍
  • 理解
  • 实现
    • 被装饰类
    • 被装饰类的具体实现
    • 装饰类
    • 装饰类具体实现
    • 测试
  • 适用场景

介绍

动态给一个对象添加一些额外的功能,动态的扩展其功能。

理解

装饰模式,可以方便的扩展一些类的功能。其实现方式更像是一种托管方式,用于将被装饰的类的功能托管给装饰器,装饰器在执行被装饰类的功能的前后可以执行相关的扩展功能。

例如,小明要交五块钱班费给班长,但是呢小明的钱还没有取出来,所以还要去银行取出来,但是小明有事。所以,这时小明让班长帮自己取出来给小明,小明再用五块钱交班费。所以在班费之前,让班长替他取了钱。

实现

被装饰类

package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 15:14* @Contact 643947568@qq.com*/
public interface Weapon {public void createWeapon();
}

被装饰类的具体实现

package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 15:15* @Contact 643947568@qq.com*/
public class Pistol implements Weapon{@Overridepublic void createWeapon() {System.out.println("制造手枪");}
}

装饰类

package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 15:15* @Contact 643947568@qq.com*/
public abstract class WeaponDecorator implements Weapon {private Weapon weapon = null;public WeaponDecorator(Weapon weapon) {this.weapon = weapon;}@Overridepublic void createWeapon() {this.weapon.createWeapon();}
}

装饰类具体实现

package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 15:17* @Contact 643947568@qq.com*/
public class ActualWeaponDecorator extends WeaponDecorator {public ActualWeaponDecorator(Weapon weapon) {super(weapon);}private void expandMethod() {System.out.println("执行扩展方法");}@Overridepublic void createWeapon() {super.createWeapon();expandMethod();}
}

测试

package cn.sh.designepattern;/** 装饰模式* @Author song* @Version 0.0.1* @Date 2025/4/24 14:50* @Contact 643947568@qq.com*/public class Main {public static void main(String[] args) {Weapon pistol = new Pistol();ActualWeaponDecorator actualWeaponDecorator = new ActualWeaponDecorator(pistol);actualWeaponDecorator.createWeapon();}
}

适用场景

装饰模式适用于不修改原来类的前提下,扩展类的功能,从而避免了继承关系的实现扩展。

但是装饰过多会导致结构复杂。

相关文章:

  • 建造者模式:分步构建复杂对象的设计模式
  • 罗伯·派克:Go语言创始者的极客人生
  • 【项目管理】进度网络图 笔记
  • Vue 2 的响应式 API 和 Vue 3 的组合式 API 的详细对比,从核心机制、使用方式、代码示例及优缺点展开
  • Linux:git和gdb/cgdb
  • 多线程(线程安全)
  • MacOS上如何运行内网穿透详细教程
  • Puter部署指南:基于Docker的多功能个人云平台掌控自己的数据
  • 《Pinia 从入门到精通》Vue 3 官方状态管理 -- 进阶使用篇
  • 音视频之H.265/HEVC量化
  • Streamlit从入门到精通:构建数据应用的利器
  • CGAL 网格等高线计算
  • 参考文献新国标GB/T 7714-2025的 biblatex 实现
  • CF每日4题
  • 云智融合普惠大模型AI,政务服务重构数智化路径
  • openwrt作旁路由时的几个常见问题 openwrt作为旁路由配置zerotier 图文讲解
  • 【数据分析实战】使用 Matplotlib 绘制玫瑰图
  • 【hadoop】HBase分布式数据库安装部署
  • P1217 [USACO1.5] 回文质数 Prime Palindromes【python】
  • Crawl4AI 部署安装及 n8n 调用,实现自动化工作流(保证好使)
  • 七部门联合发布《终端设备直连卫星服务管理规定》
  • 应急管理部派出工作组赴山西太原小区爆炸现场指导救援处置
  • 陕西省通报6起违反八项规定典型问题,省卫健委原主任刘宝琴违规收受礼品礼金
  • 城市更新·简报│中央财政支持城市更新,倾斜超大特大城市
  • 体重管理门诊来了,瘦不下来的我们有救了?|健康有方FM
  • 中国人保不再设监事会,国寿集团未再设置监事长职务