JAVA专题 适配器模式

上传人:飞****9 文档编号:128704840 上传时间:2020-04-21 格式:PDF 页数:15 大小:271.33KB
返回 下载 相关 举报
JAVA专题 适配器模式_第1页
第1页 / 共15页
JAVA专题 适配器模式_第2页
第2页 / 共15页
JAVA专题 适配器模式_第3页
第3页 / 共15页
JAVA专题 适配器模式_第4页
第4页 / 共15页
JAVA专题 适配器模式_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《JAVA专题 适配器模式》由会员分享,可在线阅读,更多相关《JAVA专题 适配器模式(15页珍藏版)》请在金锄头文库上搜索。

1、Java 与模式 适配器模式与模式 适配器模式 目的目的 将一个类的接口转换成客户希望的另外一个接口 A d a p t e r 模式使得原本由于接口接口 不兼容而不能一起工作的那些类可以一起工作 不兼容而不能一起工作的那些类可以一起工作 尽量优先使用尽量优先使用 Object Adapter 的模式的模式 意图 意图 你想使用一个已经存在的类 而它的接口不符合你的需求 你想创建一个可以复用的类 该类可以与其他不相关的类或不可预见的类 即那些接口可 能不一定兼容的类 协同工作 仅适用于对象 A d a p t e r 你想使用一些已经存在的子类 但是不可能对每一个都进 行子类化以匹配它们的接口

2、 对象适配器可以适配它的父类接口 目的和意图是不变的 摘自 设计模式迷你手册 电子版 原理 原理 保留现有的类所提供的服务 修改其接口 从而达到客户端的期望 特征 特征 目标 Target 角色 所期望得到的接口 适配源 Adaptee 现在的需要适配的接口 适配器 Adapter 将适配源接口适配成目标接口 类适配器使用继承关系复用适配源 Adaptee 因此目标 Target 不能是类 只是能接口 java 单继承 对象适配器使用委派关系复用适配源 Adaptee 因此目标 Target 可能是类或接口 可以将 多个适配源适配到一个目标接口 一 原理图 一 原理图 二 示例代码二 示例代码

3、 1 2 Created by IntelliJ IDEA 3 User leizhimin 4 Date 2008 8 2 14 43 46 5 源角色 6 7 public class Adaptee 8 public int get220v 9 return 220 10 11 12 13 14 Created by IntelliJ IDEA 15 User leizhimin 16 Date 2008 8 2 14 43 23 17 目标角色 18 19 public interface Target 20 int get110v 21 int get220v 22 23 24 25

4、 Created by IntelliJ IDEA 26 User leizhimin 27 Date 2008 8 2 14 43 07 28 适配器角色适配器角色 扩展源角色 实现目标角色 从而使得目标角色改动时候 不用改动使得目标角色改动时候 不用改动 源角色 只要改动适配器源角色 只要改动适配器 29 30 public class Adapter extends Adaptee implements Target 31 public int get110v 32 return 110 33 34 35 36 37 Created by IntelliJ IDEA 38 User le

5、izhimin 39 Date 2008 8 2 15 00 31 40 客户端 41 42 public class Client 43 public static void main String rags 44 new Client test 45 46 47 public void test 48 Target target new Adapter 49 int v1 target get110v 50 int v2 target get220v 51 52 1 概念 概念 适配器模式 Adapter Pattern GOF95 把一个类的接口变换成客户端所期待的另一种接口把一个类的接

6、口变换成客户端所期待的另一种接口 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作 2 两种形式两种形式 a 类类的适配器模式的适配器模式 b 对象对象的适配器模式的适配器模式 3 模拟问题 模拟问题 现在假设我们的程序已经设计了接口 Request 接口接口 但是现在有一个特殊的接一个特殊的接口口 SpecificRequst 能更好的完成我们的功能 但是它和我们现有的 Request 接口不匹配 那我们 如何将它们一起工作呢 看下面的实例 3 图示实例图示实例 1 a 类类的适配器模式的适配器模式 目标角色目标角色

7、public interface Target public void request 源角色源角色 public class Adaptee public void specificRequest System out println 实现所需功能 适配器角色适配器角色 public class ClassAdapter extends Adaptee implements Target public void request this specificRequest 用户角色 用户角色 public class TestClassAdapter public static void mai

8、n String args ClassAdapter adapter new ClassAdapter adapter request 运行结果 运行结果 引用 实现所需功能 3 图示实例图示实例 2 b 对象对象的适配器模式的适配器模式 实例代码 实例代码 目标角色 源角色代码不变目标角色 源角色代码不变 适配器角色适配器角色 public class ObjectAdapter implements Target private Adaptee adaptee public ObjectAdapter Adaptee adaptee this adaptee adaptee public

9、void request adaptee specificRequest 用户角色 用户角色 public class TestOjbectAdapter public static void main String arg Adaptee adaptee new Adaptee ObjectAdapter adapter new ObjectAdapter adaptee adapter request 将一个类的接口转换成客户希望的另外一个接口 将一个类的接口转换成客户希望的另外一个接口 Adapter 模式使得原本由于接口不兼模式使得原本由于接口不兼 容而不能一起工作的那些类可以一起工作

10、 容而不能一起工作的那些类可以一起工作 设计模式 设计模式 GOF Adapter 模式的宗旨就是模式的宗旨就是 基于现有类所提供的服务基于现有类所提供的服务 向客户端提供接口向客户端提供接口 以满足客户以满足客户 的期望 的期望 java 设计模式设计模式 对软件系统中 如果要复用以前的 现存对象 但是这些对象所提供的接口并不一定能 适应我们的新环境 我们就要将其转换成我们需要的接口 来供我们调用 Adapter 模式通 过定义一个新的接口 对要实现的功能加以抽象 和一个实现该接口的 Adapter 适配器 类来透明地调用外部组件 这样替换外部 组件时 最多只要修改几个 Adapter 类就

11、可以了 其他源代码都不会受到影响 简单理解就是简单理解就是 我们需要实现某个功能 而现在实现这个功能的组件不必我们自己开发 可以通过第三方的组件 即别人的代码或者自己曾经写过的代码 来实现 但第三方组件 的接口与现在所定义的接口不一致 即类名 方法名不一样 那么在不修改两方接口的情 况下 可以通过采用适配器模式来解决这一问题 适配器的适配器的 UML 图 图 Target即客户端给出的接口 此处不是 java 语言中的接口类型 而是指类名 方法名等 等 也就是客户端需要调用的组件 Adapter即适配器 Adaptee即第三方组件 Target 为用户请求接口 根据根据 Target 是否是是

12、否是 java 接口类型 适配器可以分为接口类型 适配器可以分为类适配器类适配器和和对象适配器对象适配器 类适配器 类适配器 此时 Target 是一个 java 接口 其中定义了其所期望的功能 而此时的 Adapter 则通过继继承承 Adaptee 类并实现 Target 接口来完成 即 1 class Adapter extends Adaptee implements Target 假设现在 Target 的内容为的内容为 1 interface operation 2 public int add int a int b 返回类型为整形返回类型为整形 3 Adaptee 的内容为 的

13、内容为 1 public class Adaptee 2 public int addOpe int a int b 3 return a b 4 5 那么为了利用 Adaptee 类 类适配器 Adapter 可以写成 6 public class Adapter extends Adaptee implements Target 7 public int add int a int b 8 return addOpe a b 9 10 对象适配器 对象适配器 此时 Target 可能是一个普通类可能是一个普通类 那么 Adapter 的实现可以通过继承 Target 并将具体实现 委托给

14、Adaptee 来完成 同样是前面的 add 例子 1 class Target 2 public int add int a int b 3 4 5 Public class Adapter extends Target 6 Adaptee adaptee 7 Adapter Adaptee adaptee 8 this adaptee adaptee 9 10 public int add int a int b 11 return adaptee addOpe a b 12 13 总结 总结 个人觉得适配器模式用到了面向对象语言中的多态的特性 根据客户端给出的组根据客户端给出的组 件是接

15、口还是类 适配器通过实现接口或者继承类的方式来实现多态 件是接口还是类 适配器通过实现接口或者继承类的方式来实现多态 如果是实现接口 那么适配器则可以继承第三方组件 通过调用父类方法来完成功能 如果是继承 因为 java 中不支持多继承 适配器将具体操作委派给第三方 组件来完成 这是根据客户端给出的组 件类型来区分 个人认为即使客户端给出的组件是接口 也可以通过将具体实现委派给第三 方组件来完成 因为设计模式的原 则是 优先使用对象组合而不是类继承 这样适配器模 式就很容易理解 就是客户端通过多态调用适配器 适配器通过使用第三方对象来完成具体 功能 适配器模式 适配器模式 Adapter Pa

16、ttern 另称 变压器模式 另称 变压器模式 把一个类的接口变换成客户端所期待的另一种接口 从而使原本因接口不匹配而无法在 一起工作的两个类能够在一起工作 1 类适配器 模式所涉及的角色有所涉及的角色有 1 目标 Target 角色 这就是所期待得到的接口 由于是类适配器模式 因此目标不可 以是类 2 源 Adaptee 角色 现有需要适配的接口 3 适配器 Adapter 角色 适配器类是本模式的核心 适配器把源接口转换成目标接口 显然 这一角色不可以是接口 而必须是具体类 1 目标角色类 2 public interface Target 3 源类有的方法 4 void sampleOperation1 5 源类没有的方法 6 void sampleOperation2 7 8 源类 具体类 9 public class Adaptee 10 源类含有的方法 sampleOperation1 11 public void sampleOperation1 12 13 适配器角色 14 public class Adapter extends Adaptee implements

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号