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

java装饰器设计模式

装饰器设计模式来达到类似效果。这种模式通常用于动态地添加功能,特别适合在类或接口上扩展行为。Java装饰器模式通常涉及创建一个装饰器类,该类实现被装饰对象的接口并持有被装饰对象的实例。

装饰器模式示例

假设我们有一个MessageService接口,以及其实现SimpleMessageService

// 接口
public interface MessageService {
    String sendMessage(String message);
}

// 实现
public class SimpleMessageService implements MessageService {
    @Override
    public String sendMessage(String message) {
        return "Sending message: " + message;
    }
}

我们希望动态添加功能,比如记录消息发送的日志,或对消息内容进行加密。

装饰器类

// 装饰器类
public class MessageServiceDecorator implements MessageService {
    private MessageService decoratedService;

    public MessageServiceDecorator(MessageService service) {
        this.decoratedService = service;
    }

    @Override
    public String sendMessage(String message) {
        return decoratedService.sendMessage(message);
    }
}

// 日志装饰器
public class LoggingMessageService extends MessageServiceDecorator {
    public LoggingMessageService(MessageService service) {
        super(service);
    }

    @Override
    public String sendMessage(String message) {
        System.out.println("Logging: " + message);
        return super.sendMessage(message);
    }
}

// 加密装饰器
public class EncryptedMessageService extends MessageServiceDecorator {
    public EncryptedMessageService(MessageService service) {
        super(service);
    }

    @Override
    public String sendMessage(String message) {
        String encryptedMessage = encrypt(message);
        return super.sendMessage(encryptedMessage);
    }

    private String encrypt(String message) {
        // 简单的加密示例
        return new StringBuilder(message).reverse().toString();
    }
}

使用装饰器

public class Main {
    public static void main(String[] args) {
        MessageService service = new SimpleMessageService();
        
        // 添加日志功能
        service = new LoggingMessageService(service);
        
        // 添加加密功能
        service = new EncryptedMessageService(service);

        // 调用sendMessage
        System.out.println(service.sendMessage("Hello, World!"));
    }
}

在此示例中,LoggingMessageServiceEncryptedMessageService都装饰了MessageService接口,实现了动态添加日志和加密功能的效果。每个装饰器类都可以叠加,形成一条“装饰链”。

  • Java装饰器:基于设计模式,适用于类的增强和接口的扩展,通过组合方式添加功能,适合面向对象编程。

http://www.kler.cn/a/372070.html

相关文章:

  • MacOS下TestHubo安装配置指南
  • VSCode 插件开发实战(十二):如何集成Git操作能力
  • [代码随想录23回溯]回溯的组合问题+分割子串
  • Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!
  • 【安全编码】Web平台如何设计防止重放攻击
  • 嘉立创创建工程
  • 【测试平台】打包 jenkins配置和jenkinsfile文件
  • 2023IKCEST第五届“一带一路”国际大数据竞赛--社交网络中多模态虚假 媒体内容核查top11
  • 在绑定 Google 邮箱的手机设备上,未收到二步验证码通知是什么原因?
  • Scala练习50题(基础入门)
  • 前端八股文第一篇
  • 法律智能助手:开源NLP系统助力法律文件高效审查与检索
  • MATLAB语音信号处理系统
  • 在 CentOS 7 上安装 Node.js 18.20.4
  • 谓语和谓语动词
  • 网站攻击,XSS攻击的类型
  • 代码随想录 | Day36 | 动态规划 :整数拆分不同的二叉搜索树
  • 你了解自动化测试中的SOLID原则吗?
  • Mount Image Pro,在取证安全的环境中挂载和访问镜像文件内容
  • 无人机避障——4D毫米波雷达从PCD点云到二维栅格地图
  • 夯实根基之MySql从入门到精通(一)
  • 计算机网络的数据链路层
  • [vue3 element-plus]当事件需要传递多个参数的变化写法
  • Oracle 第3章:Oracle数据库体系结构
  • 第8次CCF CSP认证真题解
  • windows下xinference无法加载本地大模型问题解决