设计模式——装饰器模式09

装饰器模式:是在原有基础上进行装饰(无修改原来代码),来添加新的功能。

例如下面对普通耳机进行装饰。
设计模式,一定要敲代码理解

修饰对象(抽象)

java 复制代码
/**
 * @author ggbond
 * @date 2024年04月07日 10:06
 * 耳机 (抽象)
 */
public abstract class Iheadphone {

    public abstract String getName();
    public abstract void play(); // 获取要播放的媒体文件名称
}

修饰对象(实现)

java 复制代码
/**
 * @author ggbond
 * @date 2024年04月07日 10:11
 * 耳机 (实体)需要装饰的对象
 */
public class HeadPhoneSony  extends Iheadphone{

    private  String name;

    public HeadPhoneSony(String name) {
        this.name = name;
    }

    @Override
    public String getName() {
        return  name;
    }

    @Override
    public void play() {
        System.out.println(this.getName()+":开机");
    }
}

装饰器 (实体)

可加修饰器 抽象

java 复制代码
/**
 * @author ggbond
 * @date 2024年04月07日 10:14
 * 装饰器  装饰普通耳机 增加降噪功能
 */
public class SuperHeadPhone extends  Iheadphone {
    protected  Iheadphone iheadphone;

    public SuperHeadPhone(Iheadphone iheadphone) {

        this.iheadphone = iheadphone;
    }

    @Override
    public String getName() {
        return iheadphone.getName();
    }

    @Override
    public void play() {
        iheadphone.play();
        System.out.println("开启降噪模式");
    }
}

测试结果

java 复制代码
/**
 * @author ggbond
 * @date 2024年04月07日 10:15
 */
public class Main {
    public static void main(String[] args) {
         Iheadphone p1=new HeadPhoneSony("xxx型号"); //普通耳机
         Iheadphone p2=new SuperHeadPhone(p1);//不改变p1内部代码的同时,增加降噪功能

         p1.play();
         System.out.println("-----");
         p2.play();

    }
}
java 复制代码
xxx型号:开机
-----
xxx型号:开机
开启降噪模式

总结

通过委托方式聚合对象,并对其对象进行方法增强。使其能在不改变对象接口的前提下强化对象功能。

代码下载

代码下载

相关推荐
tqs_123454 小时前
MySQL RR隔离级别死锁|Gap间隙锁、临键锁,订单并发范围查询死锁根因方案
java
逆境不可逃4 小时前
Pi Agent 学习笔记:多个工具怎样并行执行
java
Flynt5 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
Bs_MoneyMagnet5 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计
星云API技术支持5 小时前
企业微信二次开发:群权限设置、成员管理与群资料维护的接口组合实践
java·前端·企业微信
niucloud-admin5 小时前
JAVA V6 多商户商城 开发文档——job 计划任务开发
java·python·github
海宇AI7 小时前
零信任架构实战:基于海宇柠檬查出险-登记证构建自动化车抵贷核保网关
java·人工智能·架构·自动化
cfm_29148 小时前
单例模式详解
java
我叫张土豆8 小时前
本体论、DDD、SDD、TDD:AI 编程时代的四层认知栈
java·人工智能
白远山8 小时前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析