适配器模式的意图:
将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式的类图如下:
类适配器采用的是多重继承的方式来实现:
对象适配器依赖于对象的组合来实现:
Target:定义Client使用的与特定领域相关的接口。
Client:与符合Target接口的对象协同。
Adaptee:定义一个已经存在的类,这个类需要适配。
Adapter:对Adaptee的类与Target接口进行适配。
适配器模式的Java代码实现:
类适配器:
package adapter; /** * 类适配器 */ public class Client { public static void main(String[] args) { Target adapter = new Adapter(); adapter.request(); } } class Adaptee{ public void specificRequest(){ System.out.println("我是具有特殊功能的方法..."); } } interface Target{ public void request(); } //适配器 class Adapter extends Adaptee implements Target{ @Override public void request() { super.specificRequest(); } }
package adapter; /** * 对象适配器 */ public class Client1 { public static void main(String[] args) { Target adapter = new Adapter(new Adaptee()); adapter.request(); } } class Adaptee{ public void specificRequest(){ System.out.println("我是具有特殊功能的方法..."); } } interface Target{ public void request(); } class Adapter implements Target{ private Adaptee adaptee; public Adapter(Adaptee adaptee){ this.adaptee = adaptee; } @Override public void request() { this.adaptee.specificRequest(); } }适配器模式的适用性 :
1、想使用一个已经存在的类,而且它的接口不适合我们的需要。
2、想创建一个可以复用的类,该类可以与其它不想关的类或不可预见的类协同工作。
3、想使用一些已经存在的子类(仅适用与对象Adapter),但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
Adapter与Proxy模式的区别:
Adapter适配器模式与Poxy代理模式都是结构型模式,结构型模式是从程序的结构上来解决模块之间的耦合问题。从代码的结构来看,代理模式与适配器模式有些类似。Adapter解决的是现有对象在新的环境中的不足,而Proxy解决直接访问对象时出现的问题。两种模式比较明显的是,代理模式的真实对象和代理对象公用接口,而适配器模式,则是重新建一个适配器类出来。