不兼容结构的协调——适配器模式(三)
来源:互联网 发布:js注册界面源代码 编辑:程序博客网 时间:2024/05/17 08:02
4 类适配器
除了对象适配器模式之外,适配器模式还有一种形式,那就是类适配器模式,类适配器模式和对象适配器模式最大的区别在于适配器和适配者之间的关系不同,对象适配器模式中适配器和适配者之间是关联关系(适配器中保留适配者的实例),而类适配器模式中适配器和适配者是继承关系,类适配器模式结构如图9-5所示:
图 9-5类适配器模式结构图
根据类适配器模式结构图,适配器类实现了抽象目标类接口Target,并继承了适配者类,在适配器类的request()方法中调用所继承的适配者类的specificRequest()方法,实现了适配。
典型的类适配器代码如下所示:
- class Adapter extends Adaptee implements Target {
- public void request() {
- specificRequest();
- }
- }
由于Java、C#等语言不支持多重类继承,因此类适配器的使用受到很多限制,例如如果目标抽象类Target不是接口,而是一个类,就无法使用类适配器;此外,如果适配者Adapter为最终(Final)类,也无法使用类适配器。在Java等面向对象编程语言中,大部分情况下我们使用的是对象适配器,类适配器较少使用。
思考
在类适配器中,一个适配器能否适配多个适配者?如果能,应该如何实现?如果不能,请说明原因?
(不可以,适配者类一般为具体的类,Java不能实现多重继承)
5 双向适配器
在对象适配器的使用过程中,如果在适配器中同时包含对目标类和适配者类的引用,适配者可以通过它调用目标类中的方法,目标类也可以通过它调用适配者类中的方法,那么该适配器就是一个双向适配器,其结构示意图如图9-6所示:
图9-6双向适配器结构示意图
双向适配器的实现较为复杂,其典型代码如下所示:
- class Adapter implements Target,Adaptee {
- //同时维持对抽象目标类和适配者的引用
- private Target target;
- private Adaptee adaptee;
- public Adapter(Target target) {
- this.target = target;
- }
- public Adapter(Adaptee adaptee) {
- this.adaptee = adaptee;
- }
- public void request() {
- adaptee.specificRequest();
- }
- public void specificRequest() {
- target.request();
- }
- }
在实际开发中,我们很少使用双向适配器。
【作者:刘伟 http://blog.csdn.net/lovelion】
- 不兼容结构的协调——适配器模式(三):类适配器,双向适配器
- 适配器模式-Adapter Pattern 不兼容结构的协调——适配器模式(三):类适配器,双向适配器
- 不兼容结构的协调——适配器模式(三)
- 不兼容结构的协调——适配器模式(三)
- 不兼容结构的协调——适配器模式(三)
- 不兼容结构的协调——适配器模式(三)
- 不兼容结构的协调——适配器模式(四):缺省适配器,适配器模式总结
- 不兼容结构的协调——适配器模式
- 不兼容结构的协调——适配器模式
- 不兼容结构的协调——适配器模式
- 不兼容结构的协调——适配器模式
- 不兼容结构的协调——适配器模式(一):适配器模式概述
- 不兼容结构的协调——适配器模式(二):算法库适配器模式解决方案
- 适配器模式-Adapter Pattern 不兼容结构的协调——适配器模式(四):缺省适配器,适配器模式总结
- 不兼容结构的协调——适配器模式(一)
- 不兼容结构的协调——适配器模式(二)
- 不兼容结构的协调——适配器模式(四)
- 不兼容结构的协调——适配器模式(一)
- no installed service named "apache2"
- poj3311 Hie with the Pie
- java基础第三天
- 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ...
- s3c2440裸板程序四个led轮流灭
- 不兼容结构的协调——适配器模式(三)
- 获取一个想要的指定文件的集合,获取文件夹下(包含子目录的所有.java的文件对象,并存储到集合中)
- jquery 对 Json 的各种遍历
- HDU 1044 Collect More Jewels(BFS+DFS)
- RPC原理
- 自学笔记C语言复习2015年7月10日
- ZXing 4.7.4 编译的问题
- matlab中实现模糊粗糙集
- _inlineCallbacks详解