• 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装饰器:基于设计模式,适用于类的增强和接口的扩展,通过组合方式添加功能,适合面向对象编程。
  • 相关阅读:
    SpringBoot用kafka.listener监听接受Kafka消息
    【python】(三)python控制流
    GPT-SoVITS声音克隆训练和推理(新手教程,附整合包)
    国际腾讯云自主拼装直播 URL教程!!!
    含文档+PPT+源码等]基于SpringBoot的阳光线上交友系统包运行成功]计算机毕业设计Java毕设源码
    Redis基础
    网络协议-语义、语法和时序
    金九银十又到了分享面试经验的时候了
    【lwip】09-IPv4协议&超全源码实现分析
    前端技术选型
  • 原文地址:https://blog.csdn.net/weixin_44719499/article/details/143362749