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!"));
}
}
在此示例中,LoggingMessageService
和EncryptedMessageService
都装饰了MessageService
接口,实现了动态添加日志和加密功能的效果。每个装饰器类都可以叠加,形成一条“装饰链”。
- Java装饰器:基于设计模式,适用于类的增强和接口的扩展,通过组合方式添加功能,适合面向对象编程。