• 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装饰器:基于设计模式,适用于类的增强和接口的扩展,通过组合方式添加功能,适合面向对象编程。
  • 相关阅读:
    Java 对象内存布局详解
    Linux Mint大动作:全新设计Software Manager,大幅提升用户体验
    vscode自定义代码提示
    (学习日记)2022.8.5
    linux安装Redis
    实验9 静态路由配置
    界面控件DevExpress WPF(v23.2)下半年发展路线图
    记一次react-hooks项目获取图表图片集合并生成pdf的需求
    毕业四年,随笔
    算法探索-切面条(CSDN算法技能树第一题)
  • 原文地址:https://blog.csdn.net/weixin_44719499/article/details/143362749