适配器模式英文原文是:Convert the interface of a class into anther interface clients expect. Adapter lets classes work together that couldni`t otherwise because of incompatible interface. 意思是将一个类的接口变化成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器模式有以下三种角色:
目标角色(Target):客户所期待的接口
源角色(Adaptee):需要被转换成目标角色的原角色
适配角色(Adapter):通过继承或类关联的方式将源角色转为目标角色
适配器类图:
各个类实现代码:
源角色:
package com.zz.adapter; /** * 源角色 * Copyright 2015年4月22日 * created by txxs * all right reserved */ public class Adaptee { //原有业务处理 public void spcificRequest(){ } }
目标角色:
package com.zz.adapter; /** * 目标角色接口 * Copyright 2015年4月22日 * created by txxs * all right reserved */ public interface Target { public void request(); }
适配器角色:
package com.zz.adapter; /** * 适配器角色 * Copyright 2015年4月22日 * created by txxs * all right reserved * 根据继承的唯一性只能适配Adaptee */ public class Adapter extends Adaptee implements Target { @Override public void request() { super.spcificRequest(); } }
客户端:
package com.zz.adapter; /** * 测试类 * Copyright 2015年4月22日 * created by txxs * all right reserved */ public class Client { public static void main(String args[]){ //适配器应用 Target target = new Adapter(); target.request(); } }
适配器模式的优点:
1、可以让任何两个没有关联的类整合到一起。
2、增加了类的透明性,通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。
3、提高了代码的灵活性。
4、复用了已有的类,提高了复用性。
能够使用的场景:
1 、系统需要使用现有的类,而这些类的接口不符合系统的接口。
2、想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
3、两个类所做的事情相同或相似,但是具有不同接口的时候。
4、旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。
5、使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。
关于适配器模式可以参考http://blog.csdn.net/elegant_shadow/article/details/5006175