装饰器模式:属于结构型模式,作为现有的类的一个包装,向一个现有的对象添加新的功能,同时又不改变其结构。
介绍
意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活
主要解决问题:在不想增加很多子类的情况下扩展类
优点:装饰类和被装饰类可以独立发展,不会相互耦合
缺点:多层装饰比较复杂
示例
为矩形、圆形装 饰边框为例
//创建一个接口
public interface Shape {
void draw();
}
//实现接口的实体类。
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println(\”Shape: Rectangle\”);
}
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println(\”Shape: Circle\”);
}
}
//实现Shape接口的抽象装饰类
public abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape){
this.decoratedShape = decoratedShape;
}
public void draw(){
decoratedShape.draw();
}
}
//扩展ShapeDecorator类的实体装饰类
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\”);
}
}
//使用
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();
}
————————————————
版权声明:本文为CSDN博主「小铁-Android」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_50675668/article/details/134465715
