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

设计模式简述(十一)装饰器模式

装饰器模式

  • 描述
  • 基本使用
  • 使用

描述

装饰器模式是一种功能型模式
用于动态增强对象的功能
这么一说感觉上和代理模式有些类似

抽象装饰器 要实现原有业务接口,并注入原有业务对象
至于对原有业务对象的调用,可以采用private业务对象 + 实现业务接口方法的形式 或者 protected + 具体装饰类调用原有对象方法

但是装饰器在有些点上可能违反里氏替换原则,特别是装饰器存在重载的时候要注意

基本使用

  • 定义一个抽象业务接口(这是实现装饰器模式的基础)
public interface IService {
    void biz();
}
  • 原有业务实现类
public class DefaultService implements IService {
    @Override
    public void biz() {
        System.out.println("DefaultService....");
    }
}

  • 装饰器抽象(通常是抽象类,持有原有对象的引用
public abstract class AbstractWrapper implements IService {
    private IService service;

    public AbstractWrapper(IService service) {
        this.service = service;
    }

    @Override
    public void biz() {
        service.biz();
    }
}
  • 具体装饰器
public class WrapperA extends AbstractWrapper {
    public WrapperA(IService service) {
        super(service);
    }

    @Override
    public void biz() {
        super.biz();
        this.wrapperA();
    }

    private void wrapperA() {
        System.out.println("WrapperA 增强方法");
    }
}


public class WrapperB extends AbstractWrapper {
    public WrapperB(IService service) {
        super(service);
    }

    @Override
    public void biz() {
        super.biz();
        this.wrapperA();
    }

    private void wrapperA() {
        System.out.println("WrapperB 增强方法");
    }
}

使用

public class Sample {
    public static void main(String[] args) {
        IService service = new DefaultService();
        service.biz();
        System.out.println("===== 使用装饰器 ===");
        
        IService wrapper = new WrapperA(new WrapperB(service));
        wrapper.biz();
    }
}

相关文章:

  • Android studio局域网屏幕共享(旧手机可以用来当监控啦)
  • 虚幻5学习笔记,疑点
  • 力扣刷题-热题100题-第32题(c++、python)
  • 玩转大语言模型——使用华为官方MindIE-Server镜像方式部署DeepSeek模型
  • 编程基础 0 到 1 1768. 交替合并字符串
  • 蓝桥杯 日期统计(刷题笔记)
  • C++多线程编码二
  • 软件学报 2024年 区块链论文 录用汇总 附pdf下载
  • httpx模块的使用
  • Java中的同步和异步
  • 语法: result=ldexp (value, exp);
  • PHP 安全 E-mail
  • MatterGen-加速材料发现
  • 现代Web应用中的时光机器:深入解析撤销/重做功能的艺术与科学
  • Mac OS 禁用 SIP 系统完整性保护
  • Java学习总结-多线程-三种创建方法
  • Qt 音乐播放器项目
  • C语言:转置矩阵
  • vue封装一个toast(vue-toastification)弹窗在拦截器js中调用
  • python | numpy小记(三):理解 NumPy 中的 `np.ceil`:向上取整的利器
  • 公司注册地址变更需要哪些手续/佛山网站优化服务
  • 大美工设计网站官网/网站和网页的区别
  • 利用git做网站备份/网站收录怎么做
  • 苏州市建设局网站集群统一登录/高平网站优化公司
  • 品牌创意网站建设/保健品的营销及推广方案
  • 找潍坊做网站的/2021时事政治热点50条