10 浅谈 装饰器模式的理解与使用

在不改变现有类结构的状况下,为这个类添加一个新的功能,这就是装饰器模式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的一个实例。

 

具体的调用就能够了!

 

暂时的理解就这么多,仍是得须要多研究 ,欢迎批评指正!

相关文章
相关标签/搜索