guokehua(@yahoo.com.cn oy Java! 39设计模式(2) 1010 郭克华J2EE框架实战教学视频
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 39设计模式(2)
guokehua(@yahoo.com.cn 回顾 ●前面我们讲过几种创建模式: Factory, Builder, Singleton ●今天我们讲解结构模式 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 回顾 z前面我们讲过几种创建模式: Factory,Builder,Singleton z今天我们讲解结构模式
guokehua(@yahoo.com.cn 适配器模式( adapter 场景:有两个类: O Class a{ public void funA({/*A代码*/}} O Class b{ public void funB0{B代码*}} 这两个模块本来没有任何关系,但是应用中需要 凡是以后A的对象调用了funA方法,一定要同时 调用B的funB方法,怎么办?不能改变源代码 ●这个问题的类比:贵公司开发了一套图像应用软 件,其中一个功能是可以把图像进行清晰化。但 是这套软件运行一段时间之后,大家发现将图片 清晰化之后然后进行一下去噪声可能会更好。于 是贵公司又开发了一个专门去噪声的类,现在问 题来了,怎样把这个去噪声的类接到你原来的软 件上?不改变源代码。 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 适配器模式(adapter) z 场景:有两个类: { Class A{ public void funA(){/*A代码*/ } } { Class B{ public void funB(){/*B代码*/} } z 这两个模块本来没有任何关系,但是应用中需要 凡是以后A的对象调用了funA方法,一定要同时 调用B的funB方法,怎么办?不能改变源代码 z 这个问题的类比:贵公司开发了一套图像应用软 件,其中一个功能是可以把图像进行清晰化。但 是这套软件运行一段时间之后,大家发现将图片 清晰化之后然后进行一下去噪声可能会更好。于 是贵公司又开发了一个专门去噪声的类,现在问 题来了,怎样把这个去噪声的类接到你原来的软 件上?不改变源代码
guokehua(@yahoo.com.cn 单向适配器模式要点 注意:分清主动和被动方,主动方称为 Adaptor,被动方称为 Adaptee 定义一个类 SubAdapto,继承 Adaptor类,重 写fnA方法 ●在这个类的构造函数可以传入 Adapter的引 用 ●在 SubAdaptorl的funA里面调用 Adaptee的funB 函数 ●将 SubAdaptor当成 Adaptor来使用 Adaptor a=new SubAdaptor(new Adapteeo) 种更好的办法:用接口, spring管理 Adaptee 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 单向适配器模式要点 z 注意:分清主动和被动方,主动方称为 Adaptor,被动方称为Adaptee z 定义一个类SubAdaptor,继承Adaptor 类,重 写funA方法 z 在这个类的构造函数可以传入Adaptee的引 用 z 在SubAdaptor的funA里面调用Adaptee的funB 函数 z 将SubAdaptor当成Adaptor来使用 z Adaptor a = new SubAdaptor(new Adaptee()); z 一种更好的办法:用接口,spring管理Adaptee
guokehua(@yahoo.com.cn 更进一步的适配器 场景:有两个类: lass Af O public void funAlO{*A代码*} O public void funA20{A2代码*/} ON O class Bi O public void funB1O{*B1代码*/} O public void funB20{*B2代码*} 应用需要凡是以后A的对象调用了funA1方法, 定要同时调用B的funB1方法;B的对象调用了 funB2方法,一定要同时调用A的fnA2方法;怎 么办?不能改变源代码 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 更进一步的适配器 z 场景:有两个类: { class A{ { public void funA1(){/*A1代码*/} { public void funA2(){/*A2代码*/} { } { class B{ { public void funB1(){/*B1代码*/} { public void funB2(){/*B2代码*/} { } z 应用需要凡是以后A的对象调用了funA1方法,一 定要同时调用B的funB1方法; B的对象调用了 funB2方法,一定要同时调用A的funA2方法;怎 么办?不能改变源代码