我们看一下《研磨设计模式》中的定义:
将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式的本质是——转换匹配,复用功能。
1、首先我们定义一个接口PastInterface,如下:
package adapter; public interface PastInterface { public void past1(); public void past2(); }
2、一个简单是实现类,如下:
package adapter; public class PastImpl implements PastInterface{ PastImpl(){ System.out.println("我是PastImpl接口的实现"); }
public void past1() { // TODO Auto-generated method stub System.out.println("运行Past接口的第一个方法"); } public void past2() { // TODO Auto-generated method stub System.out.println("运行Past接口的第二个方法"); } }
3、客户端调用时,非常简单:
package adapter; public class Client { public static void main(String[] args) { PastInterface past = new PastImpl(); past.past1(); past.past2(); } }
4、结果如下:
我是PastImpl接口的实现
运行Past接口的第一个方法
运行Past接口的第二个方法
5、现在需求变更,要用新的接口实现过去的那些功能,新的接口如下:
package adapter; public interface PresentInterface { public void present1(); public void present2(); }
6、适配器模式是这样解决问题的。
package adapter; public class Adapter implements PresentInterface { PastInterface past = new PastImpl(); public void present1() { // TODO Auto-generated method stub past.past1(); } public void present2() { // TODO Auto-generated method stub past.past2(); } }
如上,Adapter类实现了当前接口PresentInterface,其方法则由原来的接口方法实现,可谓“换汤不换药”,就像一个简单的转换器,把原本的功能包装一下,变成了现在的功能。
7、于是,客户端调用时,如下:
package adapter; public class Client2 { public static void main(String[] args) { //创建一个适配器,由于适配器实现了新接口的功能,所以直接调用适配器的方法。 Adapter adapter = new Adapter(); adapter.present1(); adapter.present2(); } }
最终结果跟原结果没有任何区别。
原文:http://www.cnblogs.com/zrtqsk/p/3617285.html