用AOP对设计模式进行改进

上传人:龙*** 文档编号:595133 上传时间:2017-04-09 格式:PDF 页数:139 大小:612.26KB
返回 下载 相关 举报
用AOP对设计模式进行改进_第1页
第1页 / 共139页
用AOP对设计模式进行改进_第2页
第2页 / 共139页
用AOP对设计模式进行改进_第3页
第3页 / 共139页
用AOP对设计模式进行改进_第4页
第4页 / 共139页
用AOP对设计模式进行改进_第5页
第5页 / 共139页
点击查看更多>>
资源描述

《用AOP对设计模式进行改进》由会员分享,可在线阅读,更多相关《用AOP对设计模式进行改进(139页珍藏版)》请在金锄头文库上搜索。

1、用 AspectJ增 强 设 计 模 式 上设 计 模 式 长 期 以 来 一 直 是 一 些 经 验 丰 富 的 开 发 人 员 的 工 具 箱 的 重 要组 成 部 分 。 不 幸 的 是 , 因 为 模 式 可 以 影 响 多 个 类 , 所 以 它 们 也 是 侵 入性 的 、 难 于 使 用 ( 和 重 用 ) 。 本 文 是 AOPWork 系 列 的 第 3 部 分 ,是 一 篇 由 两 部 分 组 成 的 文 章 , 在 这 篇 文 章 中 , NicholasLesiecki 将介 绍 AOP 是 怎 样 通 过 根 本 转 变 模 式 实 现 来 解 决 这 一 问 题 的

2、 。 他 研 究了 三 个 经 典 的 Gof 设 计 模 式 ( 适 配 器 模 式 、 修 饰 器 模 式 和 观 察 者 模式 ) , 同 时 还 将 讨 论 使 用 面 向 方 面 技 术 实 现 这 些 模 式 所 带 来 的 实 践 和设 计 方 面 的 好 处 。什 么 是 设 计 模 式 ? 根 据 Design Patterns: Elements ofReusable Object-Oriented Software:设 计 模 式 系 统 地 命 名 、 促 进 和 解 释 了 解 决 面 向 对 象 系 统 中 重复 出 现 的 设 计 问 题 的 一 个 通 用 设

3、计 。 它 描 述 了 问 题 、 解 决 方 案 、 何 时应 用 该 解 决 方 案 以 及 所 产 生 的 结 果 。 它 还 提 供 了 一 些 实 现 提 示 和 示例 。 解 决 方 案 是 解 决 问 题 的 对 象 和 类 的 总 体 安 排 。 可 以 定 制 并 实 现 解决 方 案 , 解 决 具 体 上 下 文 环 境 中 的 问 题 。在 多 年 成 功 地 应 用 模 式 解 决 OO 系 统 中 的 问 题 之 后 , 我 发 现自 己 也 认 同 了 这 个 定 义 。 模 式 是 与 普 通 程 序 员 谈 论 设 计 的 最 好 方 式 ,它 们 代 表 解

4、 决 “ 重 复 出 现 的 设 计 问 题 ” 的 最 佳 实 践 。 所 以 , 当 我 参 加了 StuartHalloway 的 一 次 访 谈 时 , 我 感 到 有 点 震 惊 : 他 为 GoF 提供 了 另 一 个 头 衔 : “ 处 理 C+ 中 破 损 事 物 的 修 理 厂 ” 。 他 的 观 点 是 :在 一 种 语 言 中 以 “ 模 式 ” 方 式 存 在 的 东 西 , 在 不 同 的 范 式 下 , 可 以 融入 语 言 本 身 。 接 着 他 给 出 了 Factories 的 示 例 该 示 例 在 Java语 言 中 有 用 , 但 在 Objective

5、-C 中 却 没 多 大 用 , 后 者 支 持 从 构 造 函数 中 返 回 子 类 型 。我 思 考 了 很 长 一 段 时 间 , 然 后 我 认 识 到 两 个 方 面 实 际 上 说 的是 同 一 件 事 之 前 : 设 计 模 式 提 供 了 表 达 那 些 无 法 直 接 在 编 程 语 言 中 表达 的 概 念 的 词 汇 表 。那 么 , AOP 位 居 何 处 呢 ? 对 于 OOP, 我 们 有 GoF 模 式 , 它 提供 了 处 理 公 共 的 概 念 ( 像 观 察 者 和 修 饰 器 ) 的 统 一 方 法 ( 尽 管 有 时 有点 麻 烦 ) 。 AOP 构 建

6、 在 OOP 之 上 , 提 供 了 表 达 横 切 关 注 点 的 直 接 方式 。 它 认 为 某 些 GoF 模 式 是 关 于 横 切 的 , 可 以 直 接 用 AOP 表 示 。 所以 您 会 注 意 到 , 对 于 一 些 包 含 许 多 类 的 模 式 , 用 一 个 方 面 就 可 以 表 达 。有 些 模 式 变 得 更 易 使 用 , 因 为 它 们 可 以 包 含 更 少 代 码 。 有 些 模 式 得 到了 非 常 好 的 支 持 , 以 致 于 它 们 几 乎 消 失 不 见 。 其 他 模 式 严 格 绑 定 到OOP ( 例 如 处 理 类 结 构 的 模 式

7、) , 所 以 它 们 在 与 AOP 结 合 使 用 的 时候 保 持 不 动 。本 文 的 目 的 是 探 索 用 AOP ( 特 别 是 用 AspectJ) 进 行 的 模 式实 现 。 我 选 择 GoF 模 式 , 是 因 为 它 是 一 个 非 常 流 行 和 通 用 的 工 具 。在 本 文 的 第 1 部 分 中 , 我 要 设 置 一 些 分 析 模 式 影 响 的 指 标 , 然 后 研究 适 配 器 和 修 饰 器 模 式 。 适 配 器 会 演 示 静 态 交 叉 的 优 势 , 而 修 饰 器 则会 暴 露 它 自 身 是 一 个 正 在 消 失 的 模 式 。 在

8、 第 2 部 分 中 , 我 将 提 供 对观 察 者 模 式 更 加 深 入 的 研 究 , 这 种 模 式 并 没 有 消 失 , 但 您 会 看 到 在 用AspectJ 实 现 它 时 的 一 些 主 要 好 处 。 第 2 部 分 将 显 示 AspectJ 如 何使 模 式 转 变 成 可 重 用 的 基 本 方 面 , 从 而 允 许 您 下 载 预 先 构 建 好 的 模 式库 这 是 让 模 式 爱 好 者 们 兴 奋 的 一 大 优 势 。为 什 么 把 AOP 应 用 到 设 计 模 式 ?我 前 面 说 过 , 许 多 模 式 都 是 横 切 的 , 当 然 我 不 是

9、 第 一 个 想 到这 一 点 的 人 。 最 近 有 一 篇 研 究 论 文 对 GoF 模 式 进 行 了 分 析 , 分 析 发现 : 在 23 个 模 式 中 , 有 17 个 模 式 表 现 出 某 种 程 度 的 横 切 。 ( 这 篇论 文 是 Jan Hannemann 和 Gregor Kiczales 合 著 的 “ Java AspectJ中 的 设 计 模 式 实 现 ” , 请 参 阅 参 考 资 料 一 节 , 以 获 取 更 多 细 节 。 )如 果 AOP 承 诺 可 以 协 助 解 决 横 切 , 那 么 在 设 计 模 式 上 使 用 AOP 有 什么 好

10、处 呢 ? 我 先 从 用 通 用 术 语 回 答 这 个 问 题 开 始 , 然 后 设 置 一 个 框架 , 通 过 它 来 考 察 每 个 设 计 模 式 。在 设 计 模 式 上 使 用 AOP 的 好 处AOP 第 一 个 关 键 的 好 处 是 把 指 定 设 计 模 式 的 代 码 本 地 化 的能 力 。 这 意 味 着 通 常 只 在 一 个 方 面 或 一 对 密 切 关 联 的 方 面 上 就 可 以 实现 模 式 。 ( 这 与 Java 语 言 实 现 形 成 对 比 , 在 Java 语 言 实 现 中 , 模式 应 用 程 序 可 以 分 布 在 多 个 类 中

11、。 ) 能 够 在 一 个 地 方 看 到 所 有 代 码 会带 来 几 个 实 际 的 好 处 。 首 先 , 如 果 模 式 的 所 有 交 互 都 能 在 一 个 地 方 看到 的 话 , 那 么 阅 读 代 码 的 人 就 能 更 容 易 地 理 解 模 式 。 其 次 , 如 果 开 发人 员 需 要 改 变 模 式 的 实 现 , 那 么 他 或 她 就 能 在 一 个 地 方 修 改 模 式 , 而不 用 在 整 个 系 统 中 追 踪 模 式 的 片 断 。 最 后 , 开 发 人 员 可 以 用 有 意 义 的名 称 描 述 封 装 模 式 的 方 面 , 为 以 后 的 维

12、 护 人 员 提 供 有 关 模 式 意 图 的 文字 线 索 。 例 如 , 可 以 把 方 面 命 名 为 SensorAdapter, 这 表 明 在 传 感 器上 使 用 的 是 适 配 器 模 式 。AspectJ 模 式 实 现 的 另 一 个 关 键 好 处 就 是 遗 忘 性( obliviousness) 。 换 句 话 说 , 在 模 式 中 发 挥 作 用 的 类 不 必 知 道 这个 角 色 。 这 个 好 处 直 接 来 自 本 地 化 因 为 模 式 是 在 某 一 个 方 面 实现 本 地 化 的 , 所 以 不 需 要 冒 犯 其 参 与 者 。 遗 忘 性 让

13、 模 式 参 与 者 更 容 易理 解 代 码 。 不 仅 如 此 , 遗 忘 性 还 让 模 式 更 容 易 组 合 。 在 Java 语 言 实现 中 , 如 果 类 参 与 到 多 个 模 式 中 , 模 式 的 机 制 会 迅 速 模 糊 它 的 核 心 含义 。 如 果 类 不 知 道 那 些 在 模 式 中 的 参 与 者 , 那 么 可 以 在 其 他 上 下 文 中重 用 这 些 类 。 在 本 文 的 第 2 部 分 中 将 看 到 这 方 面 的 一 个 具 体 示 例 。这 些 好 处 允 许 对 某 些 模 式 实 现 代 码 级 重 用 。 设 计 模 式 的 概 念

14、和 结 构 一 直 都 是 可 重 用 的 。 如 果 想 实 现 观 察 者 模 式 , 任 何 人 都 可 以 找出 GoF 的 书 籍 , 把 模 式 应 用 到 自 己 的 代 码 中 。 但 是 , 如 果 使 用 面 向方 面 技 术 , 那 么 通 过 下 载 ObserverProtocol 方 面 ( 可 以 在 设 计 模式 计 划 中 获 得 它 , 请 参 阅 参 考 资 料 一 节 ) , 就 可 以 避 免 这 个 麻 烦 。除 了 节 省 的 实 现 工 作 之 外 , 代 码 级 重 用 还 允 许 模 式 代 码 和 文 档 进 行 更紧 密 的 耦 合 。

15、例 如 , 我 可 以 浏 览 ObserverProtocol 的 javadoc, 不用 另 找 一 本 书 就 可 以 理 解 它 的 意 图 和 结 构 。分 析 框 架每 个 模 式 的 描 述 都 跟 着 一 个 公 共 结 构 。 我 将 从 一 个 示 例 问 题开 始 介 绍 , 提 供 对 这 个 模 式 的 通 用 描 述 。 然 后 我 会 描 述 如 何 实 现 这 个模 式 , 先 使 用 Java 语 言 实 现 它 , 然 后 使 用 AspectJ 语 言 实 现 它 。在 每 个 实 现 后 面 , 我 都 会 描 述 是 什 么 造 成 了 模 式 的 横

16、 切 , 以 及 这 个 版本 的 模 式 在 理 解 、 维 护 、 重 用 和 编 排 代 码 的 时 候 有 什 么 效 果 。适 配 器 模 式我 要 详 细 考 虑 的 第 一 个 模 式 就 是 适 配 器 模 式 。 适 配 器 模 式 完全 是 关 于 兼 容 性 的 。 这 个 模 式 允 许 类 与 其 他 原 来 由 于 接 口 不 兼 容 而 无法 交 互 的 类 进 行 交 互 。 要 在 Java 代 码 中 实 现 适 配 器 , 需 要 用 特 殊 的适 配 器 类 包 装 目 标 类 , 适 配 器 类 能 把 目 标 类 的 API 转 换 成 客 户 想 要的 API, 或 者 转 换 成 能 够 更 容 易 利 用 的 API。设 置 : 提 供 一 个 聚 合 的 传 感 器 读 取 器假 设 现 在 要 设 计 一 个 航 天 器 , 则 需 要 提 供 一 个 读 取 器 , 读 取航 天 器 上 所 有 关 键 传 感 器 。 由 于 是 在 扩 展 现 有 系

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 述职报告

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