Java设计模式(五)——适配器模式

先举一个例子解释一下生活中的适配器模式:公司老总要求工程部经理来汇报一下公司内部的消防设备使用和维护情况。接到通知后,工程部经理老宋找了专门负责消防设备统计的维护人员小王,请他调出了去年全年的维护记录。然后老宋前去向总经理汇报工作。

在这个例子中,总经理的任务是:找工程部经理(接口)了解一下消防设备的情况,他可能并不记得谁是工程部经理。老宋(实现类,适配器)发现小王(适配者)其实可以解决这个问题,于是他要求小王提供数据并亲自向总经理做了汇报。对总经理而言,他并不关心工程部经理的具体工作。整个过程中,总经理、老宋、小王三者的角色缺一不可。如果老宋没有找小王而是自己统计,仅属于接口实现。如果老宋让小王直接去汇报,也不属于适配器模式。

适配器模式的UML关系图如下:

使用者需要调用Target接口的Request(),完成具体工作的其实是Adaptee类的SpecRequest()。Adapter类实现Request(),持有Adaptee对象并调用了它的方法。

在熟悉了适配器模式的特点以后,我们来看一个JDK中的例子:InputStreamReader。

InputStreamReader是字节流通向字符流的桥梁,它继承了Reader并使用InputStream作为构造函数的参数。在InputStreamReader内部通过nio的方法将字节数据转换成了字符数据。

同样OutputStreamWriter的设计也属于适配器模式。

posted @ 2019-03-01 15:22  冷豪  阅读(298)  评论(0编辑  收藏  举报