装饰器模式(Decorator Pattern)是一种设计模式,它允许在运行时动态地给一个对象添加额外的功能,而不需要修改原始对象的结构。
在Java中,装饰器模式可以通过以下方式实现:
1. 创建一个接口(Component),定义了原始对象和装饰器对象的共同行为。
2. 创建一个具体的实现类(ConcreteComponent),实现了接口,并提供了原始对象的具体实现。
3. 创建一个装饰器类(Decorator),实现了接口,并包含一个对Component对象的引用。装饰器类可以在调用原始对象的方法之前或之后添加额外的功能。
4. 创建具体的装饰器类(具体的Decorator类),继承自装饰器类,并在调用原始对象的方法之前或之后添加特定的功能。
以下是一个简单的示例代码,演示了如何使用装饰器模式:
// 接口
interface Shape {void draw();
}// 具体实现类
class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a circle");}
}// 装饰器类
abstract class ShapeDecorator implements Shape {protected Shape decoratedShape;public ShapeDecorator(Shape decoratedShape) {this.decoratedShape = decoratedShape;}@Overridepublic void draw() {decoratedShape.draw();}
}// 具体的装饰器类
class RedShapeDecorator extends ShapeDecorator {public RedShapeDecorator(Shape decoratedShape) {super(decoratedShape);}@Overridepublic void draw() {decoratedShape.draw();setRedBorder();}private void setRedBorder() {System.out.println("Setting red border");}
}// 客户端
public class Main {public static void main(String[] args) {Shape circle = new Circle();Shape redCircle = new RedShapeDecorator(new Circle());circle.draw();System.out.println("---");redCircle.draw();}
}
在这个示例中,Shape接口定义了原始对象和装饰器对象的共同行为。Circle类是具体的实现类,实现了Shape接口,并提供了原始对象的具体实现。
ShapeDecorator类是装饰器类,实现了Shape接口,并包含一个对Component对象的引用。在draw方法中,装饰器类调用原始对象的draw方法。
RedShapeDecorator类是具体的装饰器类,继承自装饰器类,并在调用原始对象的draw方法之前或之后添加特定的功能。在这个示例中,RedShapeDecorator类在调用原始对象的draw方法之后,添加了设置红色边框的功能。
在客户端中,通过实例化具体的装饰器类来使用装饰器模式。客户端可以选择性地添加多个装饰器,以实现不同的功能组合。
装饰器模式允许在运行时动态地给一个对象添加额外的功能,而不需要修改原始对象的结构。这提供了更大的灵活性和可扩展性,同时遵循了开闭原则。