zhjr09GoF结构型模式适配器模式.ppt

上传人:京东小超市 文档编号:5889482 上传时间:2020-08-14 格式:PPT 页数:26 大小:1.08MB
返回 下载 相关 举报
zhjr09GoF结构型模式适配器模式.ppt_第1页
第1页 / 共26页
zhjr09GoF结构型模式适配器模式.ppt_第2页
第2页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《zhjr09GoF结构型模式适配器模式.ppt》由会员分享,可在线阅读,更多相关《zhjr09GoF结构型模式适配器模式.ppt(26页珍藏版)》请在三一文库上搜索。

1、烦 剖 杠 断 脆 燕 元 聋 弦 俭 捂 翼 费 噪 倍 轴 疵 历 烃 嗡 垣 课 茄 违 螟 剥 晋 问 界 衡 堂 馏 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 计算机学院软件工程系 设计模式 授课:张金荣 Email: QQ: (即1211460305) 电话:13983103704 垛 隶 分 将 截 杏 葱 廷 舅 晃 爱 属 缆 晾 趋 税 瞻 责 绵 佰 轮 趁 挠 厨 畏 葱 穷 剩 痹 深 叠 湃 z h j r 0 9 G o F 结 构 型 模 式 适 配

2、 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 第 4 章 GoF-结构型模式 4.1 Adapter Pattern(适配器模式) 4.2 Bridge Pattern(桥接模式) 4.3 Composite Pattern(组合模式) 4.4 Decorator Pattern(装饰模式) 4.5 Facade Pattern(外观模式) 4.6 Flyweight Pattern(轻量级模式) 4.7 Proxy Pattern(代理模式) 第 4 章GoF-结构型模式 坍 怯 送 闺 悟 洲 脚 灌 万 极 跟 蒋 塞 赛 挺 驮 恃 问 斩

3、尽 说 雇 转 躇 淖 竹 部 疏 仙 珍 液 扁 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 2 第 4 章 GoF-结构型模式 第 4 章 Adapter Pattern(适配器模式) Bridge Pattern(桥接模式) 本章重点 : 本章难点: Proxy Pattern(代理模式) Composite Pattern(组合模式) GoF-结构型模式 叮 谐 刨 抠 惧 竭 喷 帘 咒 后 销 羌 炸 晌 会 欺 刮 企 茵 窟 哺 雪 器 瘫 缝 松 掷 车 烈 禾 拄 监

4、 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 3 第 4 章 GoF-结构型模式 4.1 Adapter Pattern (适配器模式) v您的电脑是个旧电脑,新的滑鼠都在使用USB接 口了,而您的电脑上并没有USB,而只有一个 PS2接口,这时您可以使用一个USB转PS2的接头 作为转换,这样您的电脑就可以使用新滑鼠了 (当然您也可以使用USB扩充卡,意思是相同的 )。 v类似的概念,有时候您想在原来的程式中加入 一个外部元件,例如一个类别,但是这个类别 与您目前所设计的程式在接口上并

5、不一致,为 了让这个外部类与原程式的接口一致,您必须 使用一个类别作为中介来配接它们,这时您可 以采用Adapter模式。 弧 爪 拒 仟 浩 铭 破 账 梦 达 妆 晕 弧 函 盎 盐 给 沼 觅 午 祭 秽 屿 氯 廷 轰 乍 东 诚 下 臼 雏 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 4 第 4 章 GoF-结构型模式 在Java中如果要定义事件处理的方式,必须实现 EventListener的子接口,例如实现 WindowListener 来定义一些视窗事件的处理方式,Win

6、dowListener中 定义了七个方法: public interface WindowListener extends EventListener public void windowOpened(WindowEvent e); public void windowClosing(WindowEvent e); public void windowClosed(WindowEvent e); public void windowIconified(WindowEvent e); public void windowDeiconified(WindowEvent e); public voi

7、d windowActivated(WindowEvent e); public void windowDecativated(WindowEvent e); Default Adapter 啤 哇 缕 瞩 兔 呸 苑 任 篷 俐 爆 女 晤 窿 衅 框 咕 打 诧 掷 猜 自 畔 格 咏 邢 癌 帐 仑 臆 贮 忱 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 5 第 4 章 GoF-结构型模式 可以定义一个类别来实现这个接口,以完全想要的事件处 理,例如: public class W

8、indowEventHandler implements WindowListener public void windowOpened(WindowEvent e) public void windowClosing(WindowEvent e) public void windowClosed(WindowEvent e) System.exit(0); public void windowIconified(WindowEvent e) public void windowDeiconified(WindowEvent e) public void windowActivated(Win

9、dowEvent e) public void windowDecativated(WindowEvent e) Default Adapter 愚 鳃 酋 培 逻 吧 布 框 貉 评 谐 偏 悯 续 北 猛 边 埋 债 襟 倘 缠 蟹 昼 堕 期 脸 肉 诚 锣 迟 苫 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 6 第 4 章 GoF-结构型模式 然而这有个缺点,实现接口的原则是您必须 实现当中所定义的所有方法,即使您对某 些事件并不感兴趣,您也必须实现一个没 有内容的空方法,代表您

10、已经实现了接口 中定义的方法,然而有时,您并不知道接 口中到底定义了几个方法,或是知道也不 知道方法的确切名称与参数,即使您查了 API,在程式中写下一堆没有实现内容的 方法也是很烦人的一件事 Default Adapter 队 颗 醒 斋 夺 善 弟 几 咋 位 若 憋 查 问 枢 汐 祥 魏 炎 辙 烟 凌 拼 扑 返 停 崖 嘶 恼 渐 臀 料 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 7 第 4 章 GoF-结构型模式 WindowAdapter类别预先实现了WindowLis

11、tener接 口,每个方法中都是空的实现,如下所示: public abstract class WindowAdapter implements WindowListener public void windowOpened(WindowEvent e) public void windowClosing(WindowEvent e) public void windowClosed(WindowEvent e) public void windowIconified(WindowEvent e) public void windowDeiconified(WindowEvent e) pu

12、blic void windowActivated(WindowEvent e) public void windowDecativated(WindowEvent e) Default Adapter 友 饶 遥 懒 但 廉 粱 吼 妇 禾 甄 菏 澄 位 呼 月 苞 姚 炔 钳 衅 藻 栽 训 晃 焉 过 飘 拱 荒 涵 撤 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 8 第 4 章 GoF-结构型模式 可以继承WindowAdapter类别,并重新 定义一些您所感兴趣的事件,如此一

13、来, 就可以避开之前所提及的,直接实现 WindowListener接口的缺点,如下所示 : public class WindowEventHandler extends WindowAdapter public void windowClosed(WindowEvent e) System.exit(0); Default Adapter 辅 次 赖 梗 酞 室 言 脑 稍 族 餐 单 裤 惺 哟 舆 贿 娘 谅 惜 红 汰 激 尖 涉 弯 道 锋 支 炽 离 笛 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模

14、 式 适 配 器 模 式 9 第 4 章 GoF-结构型模式 这就是Default Adapter模式, 它使用一个中介 的Adapter类别 来将真正感兴趣 的事件实现类别 ,配接至事件处 理接口,上面的 程式其 UML 图如 下 : Default Adapter 羹 共 贬 椿 亡 墓 牺 塘 垃 携 卤 柠 藐 勇 憨 侍 食 绽 蝎 竖 商 址 续 做 界 蓟 作 保 煤 谭 需 斑 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 10 第 4 章 GoF-结构型模式 将上图一般化

15、 ,Default Adapter模 式的结构如 下所示: Default Adapter 功 钦 才 偶 埋 拧 富 翟 绪 把 吓 骡 鄂 矣 郎 凋 两 族 角 欲 浮 循 沥 谐 弹 刘 涡 玉 囚 辣 拧 樱 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 11 第 4 章 GoF-结构型模式 vAdapter模式的一种作法是Class Adapter模 式,在这个模式下,Adapter直接继承 Adaptee(要引进的新类别),以拥有当中的 成员及方法,在C+中的话可以这么作:

16、Class Adapter 霉 姑 馒 丽 撬 冲 秀 荤 甭 极 碾 企 继 驰 允 顿 诞 滩 题 连 抬 箱 冀 官 砰 扰 焦 广 嗣 并 鸯 篆 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 12 第 4 章 GoF-结构型模式 vC+中可以多重继承,但在Java中不行,所以 在Java中若要采用Class Adapter,必须作点 修改,一方面继承Adaptee,一方面实现 Target的接口: Class Adapter 晃 沁 专 奥 员 渴 梆 啤 瓜 抄 验 呼 英 寐

17、 缮 击 草 另 讨 人 喂 冒 异 损 夕 下 舔 佳 广 嘻 沁 涛 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 13 第 4 章 GoF-结构型模式 代码的实现是这样的: public class Adapter extends Adaptee implements Target / 当然,这必须您原先的Target定义了共同的接口 ,所以Class Adapter在Java中适用的场合较 少,事实上,也比较建议使用Object Adapter ,这样的Adapter模式比较有弹性

18、,例如,您 可以在Adapter上加上个setter,以随时可以 抽换Adaptee。 Class Adapter 油 韭 犁 贿 虞 恐 哗 蔼 驾 谱 渗 复 谨 恰 陷 药 毗 号 亮 沥 维 搂 苗 腑 肃 生 串 邀 喊 毕 痘 叶 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 14 第 4 章 GoF-结构型模式 上面讲的是单个适配,看一个 多适配的例子: 如果有SomeClass类别与OtherClass 类别,您想要SomeAndOther类别 可以同时拥有SomeClas

19、s类别与 OtherClass类别中已定义好的操作 ,并可以进行多型操作,在C+中可 以用多重继承来达到,但在Java中显 然的无法使用多重继承,怎么办? Class Adapter 霞 苯 熊 庶 秆 幸 颅 套 趟 棘 蚌 啄 督 春 践 游 悍 怀 枉 讥 斑 妥 骄 漠 了 香 宙 刽 架 笛 钠 使 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 15 第 4 章 GoF-结构型模式 可以在设计上先绕个弯,先使用两个接口分 别定义好SomeClass与OtherClass两个 类别

20、的公开方法,例如: public interface ISome public void doSome(); public interface IOther public void doOther(); Class Adapter 删 捍 岩 谊 岛 蠢 肚 拆 宵 羊 栋 叛 捌 营 想 刨 拔 闸 苯 祸 恰 漆 弱 条 萍 驮 脐 赐 乡 匪 社 奥 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 16 第 4 章 GoF-结构型模式 接着让SomeClass与OtherClass分别

21、实现 两个接口: public class SomeClass implements ISome public void doSome() public class OtherClass implements IOther public void doOther() Class Adapter 脱 坚 陇 邢 索 寒 瑞 袁 塔 盼 颤 倍 刻 辜 答 吼 按 诈 扦 烈 梅 肄 柠 御 舀 屋 挂 婚 茅 饥 醒 匡 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 17 第 4 章 GoF

22、-结构型模式 SomeAndOther可以这样: public class SomeAndOther extends SomeClass implements IOther private IOther other = new OtherClass(); public void doOther() other.doOther(); Class Adapter 虽不满意,但至少解决了问题 缺陷在 哪里? 缮 蹬 造 泡 啤 钻 茨 糖 腔 粒 耻 韧 园 任 腿 听 绚 皑 形 堡 努 扯 盘 诗 眶 烈 裁 巍 羞 络 甫 援 z h j r 0 9 G o F 结 构 型 模 式 适 配 器

23、 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 18 第 4 章 GoF-结构型模式 Object Adapter v与类的适配器一样,对象的适配 器把被适配的类的API转化成目 标类的API v不同的是,对象的适配器不是通 过继承来适配,而是通过代理来 适配 v其类图如下: 踢 契 荒 钙 饱 奸 评 韩 侈 拦 锥 带 廉 匪 般 莱 奠 狸 脉 早 栅 毅 藩 环 杉 丑 熔 巴 栖 颅 疯 靠 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 19

24、 第 4 章 GoF-结构型模式 Object Adapter 全 社 酝 时 娃 见 壳 涂 样 秀 稍 切 销 割 陵 撇 捎 畅 略 集 肾 碟 鸡 钞 辕 环 蔗 栓 漠 贮 侯 望 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 20 第 4 章 GoF-结构型模式 v可以看出,涉及的角色有: 目标(target)角色 源(adaptee)角色 适配器(adapter)角色 Adapter与adaptee是委派关系 ,这个特性决定了这个适配器 模式是对象的。 Object Adap

25、ter 抄 金 捷 医 蛇 蹭 垒 峰 舀 占 每 国 选 凭 橇 宇 繁 野 透 懈 积 群 升 鼠 辗 幢 铀 妈 幽 翱 吃 毯 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 21 第 4 章 GoF-结构型模式 现在来看前面的例子: 如果有SomeClass类别与 OtherClass类别,您想要 SomeAndOther类别可以同时 拥有SomeClass类别与 OtherClass类别中已定义好的操 作 Object Adapter 畏 哦 危 鬃 亨 靶 厅 简 解 纠 瑰

26、斟 酞 宦 瓜 锋 毫 钠 辽 戴 剐 缘 聋 谗 伯 茁 放 饱 柬 倪 屋 捐 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 22 第 4 章 GoF-结构型模式 假设SomeClass类别有some1, some2方法 OtherClass类别有other1, other2,other3方法 那么SomeAndOther类别如何实 现呢? Object Adapter 粥 镭 存 冷 冤 锗 碟 群 勺 囱 酋 询 苦 课 拙 鲸 惠 锐 弛 童 萤 趋 倒 谎 种 芭 艺 唯 压

27、杆 进 椭 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 23 第 4 章 GoF-结构型模式 Class SomeAndOther private SomeClass sm; private OtherClass ot; public SomeAndOther() sm=new SomeClass (); ot=new OtherClass (); public void some1()/委托方法 sm.some1(); /同理实现其他委托方法 Object Adapter 恬 肯 借

28、发 邀 晌 击 艾 倔 那 箭 镐 佑 憋 阑 宣 荆 讣 异 返 傀 捧 蘸 硝 供 程 揽 烘 舌 褥 吐 日 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 24 第 4 章 GoF-结构型模式 上面的实现少了什么? 为了目标类的接口统一起见,应该 定义一个目标类的接口,然后适 配器类实现该接口,接口方法通 过委托来实现; 该接口应该适配被适配的多个对象 ,并在需要时扩展。 Object Adapter 颠 祷 啼 褐 思 笨 量 羡 苇 蔷 噶 扭 瓮 食 放 茫 傀 魏 迪 酚 研

29、 苇 槛 痪 誉 辟 霞 眷 旦 母 钵 烤 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 25 烦 剖 杠 断 脆 燕 元 聋 弦 俭 捂 翼 费 噪 倍 轴 疵 历 烃 嗡 垣 课 茄 违 螟 剥 晋 问 界 衡 堂 馏 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 计算机学院软件工程系 等 钻 呻 脱 木 窿 腕 缎 亦 掳 大 昧 隐 裳 驾 登 兑 街 岛 间 咽 炬 余 摈 荷 也 畜 歉 蛰 踪 兜 蛤 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式 z h j r 0 9 G o F 结 构 型 模 式 适 配 器 模 式

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1