在不改变现有类结构的状况下,为这个类添加一个新的功能,这就是装饰器模式ide
所属与结构型模式,测试
这种模式的特色是:须要建立一个装饰类来包装原有的类,而且提供额外的功能。this
为了解决:平时使用继承的方式,会带入许多静态的方法,致使子类过分饱和,膨胀。spa
举例子:悟空拥有七十二变,无论它怎么变化,他的本质仍是一只猴子,可是他又有变化后的一些本领(功能)code
实现:装饰类包含原有类的实例对象,便可实现装饰器模式对象
开始:blog
定义一个形状的接口继承
//画图接口 public interface Shape { void draw(); }
定义一个长方形的类去实现咱们的形状接口,实现画出一个长方形的功能接口
public class Rectangle implements Shape { @Override public void draw() { System.out.println("画出长方形"); } }
定义一个圆形的类去实现咱们形状,画出圆ci
public class Circle implements Shape { @Override public void draw() { System.out.println("画出一个圆形"); } }
//须要一个包装类,抽象类,而且实现被包装对象的接口
public abstract class Decorator implements Shape { protected Shape shape; public Decorator(Shape shape) { this.shape = shape; } @Override public void draw() { shape.draw(); } }
//具体的加入新功能的包装类实现类 继承这个包装抽象类
public class RedDecorator extends Decorator { public RedDecorator(Shape shape) { super(shape); } @Override public void draw() { super.draw(); //实现一个新的装饰 System.out.println("实现红色包装"); } }
//开始测试
public static void main(String[] args) { //红色长方形包装类 Shape rectangle = new RedDecorator(new Rectangle()); Shape circle = new RedDecorator(new Circle()); rectangle.draw(); circle.draw(); }
//而后,形象的截图表示一下,
学到这里,大体总结一下,本来的Shape(形状)接口只是用来画出具体的形状,好比圆形,长方形,没有具体的颜色这一功能。
就比如刚开始提到的,在不改变原有类结构的状况下,加入一项新的功能。咱们在这个程序里面加入的是一项红色的包装这一功能。
具体的实现就是须要一个抽象包装类去实现原有功能的接口,而后引入一个具体的实例对象,而且使用实例的具体方法。好比draw();
具体相加如什么功能,就用具体的一个类去继承这个抽象类,由于这个抽象类自己已经实现了Shape 因此具体实现的 RedDecorator自己也就是一个Shape的一个实例。
具体的调用就能够了!
暂时的理解就这么多,仍是得须要多研究 ,欢迎批评指正!