装饰者模式允许开发者向一个已经存在的对象中增加新的功能,而不改变对象的结构。这种模式创建一个原类的包装类,通过提供额外的功能保持原有对象的简洁性。
本例中通过创建一个Shape接口,具体实现Shape接口的类,创建装饰类ShapeDecorator实现Shape接口,同时拥有一个Shape对象的实例。
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Cricle");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Rectangle");
}
}
public abstract class ShapeDecorator implements Shape{
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape) {
this.decoratedShape = decoratedShape;
}
@Override
public void draw() {
decoratedShape.draw();
}
}
public class RedShapeDecorator extends ShapeDecorator{
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
@Override
public void draw() {
decoratedShape.draw();
setRedBorder(decoratedShape);
}
public void setRedBorder(Shape decoratedShape) {
System.out.println("Border Color: Red");
}
}
public class Demo {
public static void main(String[] args) {
Shape circle = new Circle();
Shape redCircle = new RedShapeDecorator(new Circle());
Shape redRectangle = new RedShapeDecorator(new Rectangle());
System.out.println("Circle with normal border");
circle.draw();
System.out.println("\nCircle of red border");
redCircle.draw();
System.out.println("\nRectangle of red border");
redRectangle.draw();
}
}
输出:
Circle with normal border
Shape: Cricle
Circle of red border
Shape: Cricle
Border Color: Red
Rectangle of red border
Shape: Rectangle
Border Color: Red