装饰器设计模式来达到类似效果。这种模式通常用于动态地添加功能,特别适合在类或接口上扩展行为。Java装饰器模式通常涉及创建一个装饰器类,该类实现被装饰对象的接口并持有被装饰对象的实例。
装饰器模式示例:
假设我们有一个MessageService
接口,以及其实现SimpleMessageService
。
// 接口
public interface MessageService {String sendMessage(String message);
}// 实现
public class SimpleMessageService implements MessageService {@Overridepublic String sendMessage(String message) {return "Sending message: " + message;}
}
我们希望动态添加功能,比如记录消息发送的日志,或对消息内容进行加密。
装饰器类:
// 装饰器类
public class MessageServiceDecorator implements MessageService {private MessageService decoratedService;public MessageServiceDecorator(MessageService service) {this.decoratedService = service;}@Overridepublic String sendMessage(String message) {return decoratedService.sendMessage(message);}
}// 日志装饰器
public class LoggingMessageService extends MessageServiceDecorator {public LoggingMessageService(MessageService service) {super(service);}@Overridepublic String sendMessage(String message) {System.out.println("Logging: " + message);return super.sendMessage(message);}
}// 加密装饰器
public class EncryptedMessageService extends MessageServiceDecorator {public EncryptedMessageService(MessageService service) {super(service);}@Overridepublic 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);// 调用sendMessageSystem.out.println(service.sendMessage("Hello, World!"));}
}
在此示例中,LoggingMessageService
和EncryptedMessageService
都装饰了MessageService
接口,实现了动态添加日志和加密功能的效果。每个装饰器类都可以叠加,形成一条“装饰链”。
- Java装饰器:基于设计模式,适用于类的增强和接口的扩展,通过组合方式添加功能,适合面向对象编程。