当前位置: 首页 > 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.xdnf.cn/news/118027.html

相关文章:

  • Matlab 复合多层结构的隔声研究
  • 【1区SCI】Fusion entropy融合熵,多尺度,复合多尺度、时移多尺度、层次 + 故障识别、诊断-matlab代码
  • MATLAB 中的图形绘制
  • unity Animation学习,精准控制模型动画播放
  • 【星海出品】Calico研究汇总
  • Flink 源码编译
  • 1、AI及LLM基础:Python语法入门教程
  • 达梦并行收集统计信息
  • HarmonyOS:一多能力介绍:一次开发,多端部署
  • 推荐几个可以在手机电脑同步的的备忘记事工具
  • 设计模式--建造者模式详解
  • 机器学习在网络安全中的应用:守护数字世界的防线
  • 基础的 IO
  • Playwright自动化测试实战指南-高级部分
  • Ext Direct 功能与使用详解
  • Java并发编程 - ReentrantLock
  • HTML应用指南:利用GET请求获取微博签到位置信息
  • java—11 Redis
  • 基于大模型的结肠癌全病程预测与诊疗方案研究
  • 第五章:Framework/Tooling Abstraction
  • 凝聚湾区网信力量!向成电子受邀参加2025麒麟软件华南生态渠道大会
  • Go语言中包导入下划线的作用解析
  • Python学习笔记(三)(程序流程控制)
  • SEO的关键词研究与优化 第二章
  • 前端基础之《Vue(9)—混入》
  • Linux操作系统--基础I/O(上)
  • Freertos----软件定时器
  • WPS右键菜单中“上传到云文档”消失,使用命令行注册解决
  • LeetCode-Hot100
  • 数据集-目标检测系列- F35 战斗机 检测数据集 F35 plane >> DataBall