装饰器模式
装饰器模式是一种结构型设计模式,用于动态地给对象添加额外的行为或责任,而不需要改变原始对象的结构。通过创建一个包装器类(装饰器),它包含原始对象的引用,并提供与原始对象相同的接口,可以在运行时灵活地添加、修改或移除原始对象的功能。
以下是一个简单的装饰器模式的示例:
java
// 定义一个接口,表示组件(Component)
public interface Message {
void send();
}
// 实现 Component 接口的具体组件类(ConcreteComponent)
public class EmailMessage implements Message {
@Override
public void send() {
System.out.println("Sending email message");
}
}
// 创建一个抽象装饰器类(Decorator),实现 Component 接口
public abstract class MessageDecorator implements Message {
protected Message decoratedMessage;
public MessageDecorator(Message decoratedMessage) {
this.decoratedMessage = decoratedMessage;
}
@Override
public void send() {
decoratedMessage.send();
}
}
// 具体装饰器类(ConcreteDecorator),扩展装饰器功能
public class SecureMessageDecorator extends MessageDecorator {
public SecureMessageDecorator(Message decoratedMessage) {
super(decoratedMessage);
}
@Override
public void send() {
encryptMessage();
super.send();
}
private void encryptMessage() {
System.out.println("Encrypting message");
}
}
// 使用示例
public class Main {
public static void main(String[] args) {
// 创建具体组件对象
Message emailMessage = new EmailMessage();
// 创建装饰器对象,将具体组件对象传入
Message secureEmailMessage = new SecureMessageDecorator(emailMessage);
// 调用装饰后的方法
secureEmailMessage.send();
}
}
在上述示例中,Message 是一个表示消息发送的接口,EmailMessage 是实现了 Message 接口的具体组件类。MessageDecorator 是抽象装饰器类,它也实现了 Message 接口,并持有一个 Message 类型的引用。SecureMessageDecorator 是具体装饰器类,它扩展了装饰器的功能,包括对消息的加密操作。
通过使用装饰器模式,我们可以动态地向需要发送的消息添加额外的加密行为,而不需要修改原始的消息发送逻辑。在示例中,secureEmailMessage 是对 emailMessage 的装饰,通过调用 send() 方法,会先进行加密操作,然后再发送邮件。这样我们可以在运行时根据需要添加或者移除装饰器,以达到动态地增加功能的效果。