苏州pc网站开发,wordpress后台菜单添加设置按钮,建设银行wap网站,wordpress标签插件文章目录 六、装饰者模式 六、装饰者模式
装饰者模式#xff08;Decorator Pattern#xff09;允许向一个现有的对象添加新的功能#xff0c;同时又不改变其结构。它是作为现有的类的一个包装。 装饰类和被装饰类可以独立发展#xff0c;不会相互耦合#xff0c;装饰者模… 文章目录 六、装饰者模式 六、装饰者模式
装饰者模式Decorator Pattern允许向一个现有的对象添加新的功能同时又不改变其结构。它是作为现有的类的一个包装。 装饰类和被装饰类可以独立发展不会相互耦合装饰者模式是继承的一个替代模式装饰者模式可以动态扩展一个实现类的功能。
举个例子还是绘画不同的形状的例子加入系统中有画各种形状的功能但随着功能后期的演化需要画出带有边框的各种形状那么此时就可以采用装饰者设计模式来做增强。
下面使用程序演示下上面的例子
定义形状接口
public interface Shape {void draw();
}定义圆形的实现
public class Circle implements Shape {Overridepublic void draw() {System.out.println(开始画圆形);}
}定义矩形的实现
public class Rectangle implements Shape {Overridepublic void draw() {System.out.println(开始画矩形);}
}定义装饰器的抽象模板
public abstract class ShapeDecorator implements Shape {protected Shape decoratedShape;public ShapeDecorator(Shape decoratedShape){this.decoratedShape decoratedShape;}Overridepublic void draw(){decoratedShape.draw();}
}定义具体的边框装饰器
public class BorderShapeDecorator extends ShapeDecorator {public BorderShapeDecorator(Shape decoratedShape) {super(decoratedShape); }Overridepublic 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();}
}上面可以看出再不改变原先类的基础上做了画边框的效果对原有做增强使用装饰者设计模式可以大大提高系统的可扩展性。