JDK设计模式之——装饰者模式(适配器模式)
Posted ssskkk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK设计模式之——装饰者模式(适配器模式)相关的知识,希望对你有一定的参考价值。
- 假定已经有三个类A,B和C他们的继承关系如下
ClassA | |
Class B extends A | Class C extends A |
想进一步扩展类B和类C的功能,新增三个方法 method1()、 method2()、 method3()。
要求 类B和类C 满足 可能新增一个方法,两个方法,或者三个方法
- 用继承扩展(缺点很大)
解决办法,用继承关系 给B写7个子类(3个方法的排列组合 2的三次方-1) 给A也写三个子类。
采用继承的方式扩展B类和C类的功能,会导致子类的数目急剧增加,而且存在重复代码。
- 装饰者设计模式
在这种设计模式中,把需要扩展的功能(method1()、method2()、method3())放在装饰类中,装饰器类继承A、因此拥有类A的接口。在装饰器中还包含了一个类A的实例
因此:装饰器不仅拥有类A实例的功能,并且还能扩展类A实例的功能
下面定义三个装饰器类 Decorator1 Decorator2 Decorator3,他们分别提供一种新增的功能分别是 method1()、method2()、method3()
public class Decorator1 extends A{ protected A a; public Decorator1(A a){ this.a=a; } public void method1(){ System.out.println("我是方法1"); } }
public class Decorator2 extends A{ protected A a; public Decorator2(A a){ this.a=a; } public void method2(){ System.out.println("我是方法2"); } }
public class Decorator3 extends A{ protected A a; public Decorator3(A a){ this.a=a; } public void method3(){ System.out.println("我是方法3"); } }
在下面程序中对类B类进行了装饰,使它们具有method1()和method2()的功能 这样可以很灵活的满足需求
public class Test { public static void main(String[] args) { A a = new B(); Decorator1 d1= new Decorator1(a); d1.method1(); Decorator2 d2= new Decorator2(a); d2.method2(); } }
可以看到 装饰器设计模式简化了类的继承关系,并且提高代码的可重用性
BufferedInputStream(InputStream in, int size)
创建具有指定缓冲区大小的 BufferedInputStream
并保存其参数,即输入流 in
,以便将来使用。
JDK中的BufferedInputStream就是InputStream的一个装饰器
以上是关于JDK设计模式之——装饰者模式(适配器模式)的主要内容,如果未能解决你的问题,请参考以下文章