设计模式-结构型模式之装饰者设计模式
文章目录
- 六、装饰者模式
六、装饰者模式
装饰者模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。它是作为现有的类的一个包装。
装饰类和被装饰类可以独立发展,不会相互耦合,装饰者模式是继承的一个替代模式,装饰者模式可以动态扩展一个实现类的功能。
举个例子:还是绘画不同的形状的例子,加入系统中有画各种形状的功能,但随着功能后期的演化,需要画出带有边框的各种形状,那么此时就可以采用装饰者设计模式来做增强。
下面使用程序演示下上面的例子:
- 定义形状接口
public interface Shape {
void draw();
}
- 定义圆形的实现
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("开始画圆形!");
}
}
- 定义矩形的实现
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("开始画矩形!");
}
}
- 定义装饰器的抽象模板
public abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape){
this.decoratedShape = decoratedShape;
}
@Override
public void draw(){
decoratedShape.draw();
}
}
- 定义具体的边框装饰器
public class BorderShapeDecorator extends ShapeDecorator {
public BorderShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
@Override
public void draw() {
decoratedShape.draw();
setRedBorder(decoratedShape);
}
private void setRedBorder(Shape decoratedShape){
System.out.println("画边框!");
}
}
- 演示
public class demo {
public static void main(String[] args) {
Shape circle = new Circle();
circle.draw();
Shape shape = new BorderShapeDecorator(new Circle());
shape.draw();
Shape shape1 = new BorderShapeDecorator(new Rectangle());
shape1.draw();
}
}
上面可以看出再不改变原先类的基础上,做了画边框的效果,对原有做增强,使用装饰者设计模式,可以大大提高系统的可扩展性。