适配器模式 将一个类的接口,转换成客户期望的另一个接口,适配器让原来接口不兼容的类可以合作无间。
(外观模式 提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。)
(适配器将一个对象包装起来以改变其接口;外观将一群对象“包装”起来以简化其接口;装饰者将一个对象包装起来以增加新的行为和责任)
适配器模式:
适配器模式有两种形式:对象适配器和类适配器。类适配器需要多重继承(java不支持多重继承。。),类适配器继承被适配者和目标类。
对象适配器利用组合的方式将请求传送给被适配者。
系统中有一个具有某个特定功能的类Adaptee,一个客户类Client――他需要一个实现Target接口的对象,和一个Target接口
客户使用适配器的过程如下:
(1)客户通过目标接口调用适配器的方法对适配器发出请求;
(2)适配器使用被适配器者接口把请求转换成被适配器者的一个或多个调用接口;
(3)客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。
//Adaptee.java public class Adaptee{ public void specialRequest(){ System.out.println("Called SpecificRequest() in Adaptee "); } } //Client.java public class Client { public static void main(String[] args){ Target t = …… //new Adapter() ; t.request(); } } //Target.java public interface Target{ public void request(); }
类适配器:(类适配器具有以下的两个特点:1.适配器类(Adapter)实现Target接口;2. 适配器类(Adapter)通过继承来实现对Adaptee类的重用。)
//Adapter.java public class Adapter extends Adaptee implements Target{ public void request(){ this.specialRequest(); } }
对象适配器:(对象的适配器具有以下的两个特点:1.适配器类(Adapter)实现Target接口;2. 适配器类(Adapter)通过组合来实现对Adaptee类的重用。)
//Client.java public class Client { public static void main(String[] args){ Target t = new Adapter() ; t.request(); } }
真实世界的适配器:
Iterator(迭代器)接口和枚举接口,都可以遍历此集合类型内的每个元素,但不同的是,迭代器还提供了删除元素的能力。。
参考Head First和http://miaoxiaodong78.blog.163.com/blog/static/1876513620070123473737/