当前位置: 首页 > 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();}
}

适用场景

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

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

http://www.dtcms.com/a/152491.html

相关文章:

  • 建造者模式:分步构建复杂对象的设计模式
  • 罗伯·派克: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 调用,实现自动化工作流(保证好使)
  • Kotlin基础知识全面解析(下)
  • 深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret
  • Kotlin Multiplatform--02:项目结构进阶
  • 【产品经理从0到1】Axure介绍
  • 认识游戏循环
  • Flask + ajax上传文件(一)
  • 数据库数据删除与修改实验
  • 第十届电气、电子和计算机工程研究国际学术研讨会(ISAEECE 2025)
  • 携国家图书馆文创打造AI创意短片,阿里妈妈AIGC能力面向商家开放
  • 中篇:深入剖析 L2CAP 与 ATT 协议模块(约5000字)