java 装饰器模式例子
时间: 2023-05-21 18:01:43 浏览: 105
以下是一个简单的 Java 装饰器模式的例子:
```
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing Circle");
}
}
public abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape) {
this.decoratedShape = decoratedShape;
}
public void draw() {
decoratedShape.draw();
}
}
public class RedShapeDecorator extends ShapeDecorator {
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
@Override
public void draw() {
decoratedShape.draw();
setRedBorder(decoratedShape);
}
private void setRedBorder(Shape decoratedShape) {
System.out.println("Border Color: Red");
}
}
// Usage
Shape circle = new Circle();
Shape redCircle = new RedShapeDecorator(new Circle());
Shape redRectangle = new RedShapeDecorator(new Rectangle());
circle.draw();
redCircle.draw();
redRectangle.draw();
```
这个例子中,我们定义了一个 `Shape` 接口和一个实现了 `Shape` 接口的 `Circle` 类。然后我们定义了一个抽象类 `ShapeDecorator`,它实现了 `Shape` 接口,并且包含一个 `Shape` 类型的成员变量 `decoratedShape`。`ShapeDecorator` 的子类可以通过重写 `draw` 方法来添加额外的行为,同时也可以调用 `decoratedShape` 的 `draw` 方法来保留原有的行为。
在这个例子中,我们定义了一个 `RedShapeDecorator` 类,它继承自 `ShapeDecorator`。`RedShapeDecorator` 的 `draw` 方法首先调用 `decoratedShape` 的 `draw` 方法,然后添加了一个红色的边框。我们可以使用这个装饰器来装饰 `Circle` 或者 `Rectangle` 对象,从而给它们添加一个红色的边框。
阅读全文