[b]一、 引入[/b]
假设已有一个软件系统,你希望它能和一个新的厂商类库搭配使用,但是这个新厂商所涉及出俩的接口,不同于旧厂商的接口:
[img]http://dl2.iteye.com/upload/attachment/0102/2684/601f59d4-c693-3293-a226-1f18b95de0f4.bmp[/img]
我们不想改变现有的代码,也不能改变新厂商的代码,这时可以写一个类,将新厂商接口转换成已有系统需要的接口。
[img]http://dl2.iteye.com/upload/attachment/0102/2686/be6f0470-aa4d-3e48-8db6-04f601cdaabc.bmp[/img]
神奇的是中间这个适配器(Adapter),既表现的像期望的接口(实现期望的接口),又能和实际的接口沟通(引用实际的接口对象,调用其方法)。
[b]二、 定义[/b]
[color=red]适配器模式:[/color]将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
现在来看适配器模式的类图:
[img]http://dl2.iteye.com/upload/attachment/0102/2688/28609af1-830b-3f6d-996f-5c8a3273d038.bmp[/img]
上面我们看到的都是对象适配器。实际上有两种适配器,一种是上面讲到的对象适配器,还有一种类适配器。类适配器需要多重继承才能实现,这在java中是不可能的,所以没有讲述,类适配器模式的类图:
[img]http://dl2.iteye.com/upload/attachment/0102/2690/0e0c5354-9d84-3d37-ad7d-02ac20ba65d0.bmp[/img]
参考资料:
《HeadFirst设计模式》
假设已有一个软件系统,你希望它能和一个新的厂商类库搭配使用,但是这个新厂商所涉及出俩的接口,不同于旧厂商的接口:
[img]http://dl2.iteye.com/upload/attachment/0102/2684/601f59d4-c693-3293-a226-1f18b95de0f4.bmp[/img]
我们不想改变现有的代码,也不能改变新厂商的代码,这时可以写一个类,将新厂商接口转换成已有系统需要的接口。
[img]http://dl2.iteye.com/upload/attachment/0102/2686/be6f0470-aa4d-3e48-8db6-04f601cdaabc.bmp[/img]
神奇的是中间这个适配器(Adapter),既表现的像期望的接口(实现期望的接口),又能和实际的接口沟通(引用实际的接口对象,调用其方法)。
[b]二、 定义[/b]
[color=red]适配器模式:[/color]将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
现在来看适配器模式的类图:
[img]http://dl2.iteye.com/upload/attachment/0102/2688/28609af1-830b-3f6d-996f-5c8a3273d038.bmp[/img]
上面我们看到的都是对象适配器。实际上有两种适配器,一种是上面讲到的对象适配器,还有一种类适配器。类适配器需要多重继承才能实现,这在java中是不可能的,所以没有讲述,类适配器模式的类图:
[img]http://dl2.iteye.com/upload/attachment/0102/2690/0e0c5354-9d84-3d37-ad7d-02ac20ba65d0.bmp[/img]
参考资料:
《HeadFirst设计模式》