zhjr09GoF结构型模式适配器模式_第1页
zhjr09GoF结构型模式适配器模式_第2页
zhjr09GoF结构型模式适配器模式_第3页
zhjr09GoF结构型模式适配器模式_第4页
zhjr09GoF结构型模式适配器模式_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机学院软件工程系设计模式设计模式授课:张金荣授课:张金荣emailemail: qqqq: ( (即即1211460305)1211460305)电话:电话:1398310370413983103704第第 4 章章 gof-结构型模式结构型模式24.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(

2、代理模式)第 4 章gof-结构型模式第第 4 章章 gof-结构型模式结构型模式3第 4 章adapter pattern(适配器模式)(适配器模式) bridge pattern(桥接模式)(桥接模式)本章重点:本章重点:本章难点:本章难点:proxy pattern(代理模式)(代理模式)composite pattern(组合模式)(组合模式)gof-结构型模式第第 4 章章 gof-结构型模式结构型模式44.1 adapter pattern (适配器模式)v您的电脑是个旧电脑,新的滑鼠都在使用您的电脑是个旧电脑,新的滑鼠都在使用usbusb接接口了,而您的电脑上并没有口了,而您的电

3、脑上并没有usbusb,而只有一个,而只有一个ps2ps2接口,这时您可以使用一个接口,这时您可以使用一个usbusb转转ps2ps2的接头作为的接头作为转换,这样您的电脑就可以使用新滑鼠了(当然转换,这样您的电脑就可以使用新滑鼠了(当然您也可以使用您也可以使用usbusb扩充卡,意思是相同的)。扩充卡,意思是相同的)。v类似的概念,有时候您想在原来的程式中加入一类似的概念,有时候您想在原来的程式中加入一个外部元件,例如一个类别,但是这个类别与您个外部元件,例如一个类别,但是这个类别与您目前所设计的程式在接口上并不一致,为了让这目前所设计的程式在接口上并不一致,为了让这个外部类与原程式的接口一

4、致,您必须使用一个个外部类与原程式的接口一致,您必须使用一个类别作为中介来配接它们,这时您可以采用类别作为中介来配接它们,这时您可以采用adapteradapter模式。模式。第第 4 章章 gof-结构型模式结构型模式5在java中如果要定义事件处理的方式,必须实现eventlistener的子接口,例如实现 windowlistener来定义一些视窗事件的处理方式,windowlistener中定义了七个方法:public interface windowlistener extends eventlistener public void windowopened(windowevent

5、e); public void windowclosing(windowevent e); public void windowclosed(windowevent e); public void windowiconified(windowevent e); public void windowdeiconified(windowevent e); public void windowactivated(windowevent e); public void windowdecativated(windowevent e);default adapter第第 4 章章 gof-结构型模式结构

6、型模式6可以定义一个类别来实现这个接口,以完全想要的事件处理,例如:public class windoweventhandler 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 windowdeiconifie

7、d(windowevent e) public void windowactivated(windowevent e) public void windowdecativated(windowevent e) default adapter第第 4 章章 gof-结构型模式结构型模式7然而这有个缺点,实现接口的原则是您必须实现当中所定义的所有方法,即使您对某些事件并不感兴趣,您也必须实现一个没有内容的空方法,代表您已经实现了接口中定义的方法,然而有时,您并不知道接口中到底定义了几个方法,或是知道也不知道方法的确切名称与参数,即使您查了api,在程式中写下一堆没有实现内容的方法也是很烦人的一件事

8、 default adapter第第 4 章章 gof-结构型模式结构型模式8windowadapter类别预先实现了windowlistener接口,每个方法中都是空的实现,如下所示:public abstract class windowadapter implements windowlistener public void windowopened(windowevent e) public void windowclosing(windowevent e) public void windowclosed(windowevent e) public void windowiconif

9、ied(windowevent e) public void windowdeiconified(windowevent e) public void windowactivated(windowevent e) public void windowdecativated(windowevent e) default adapter第第 4 章章 gof-结构型模式结构型模式9可以继承windowadapter类别,并重新定义一些您所感兴趣的事件,如此一来,就可以避开之前所提及的,直接实现 windowlistener接口的缺点,如下所示:public class windoweventhan

10、dler extends windowadapter public void windowclosed(windowevent e) system.exit(0); default adapter第第 4 章章 gof-结构型模式结构型模式10这就是default adapter模式,它使用一个中介的adapter类别来将真正感兴趣的事件实现类别,配接至事件处理接口,上面的程式其 uml 图如下 :default adapter第第 4 章章 gof-结构型模式结构型模式11将上图一般化,default adapter模式的结构如下所示:default adapter第第 4 章章 gof-结

11、构型模式结构型模式12vadapter模式的一种作法是class adapter模式,在这个模式下,adapter直接继承adaptee(要引进的新类别),以拥有当中的成员及方法,在c+中的话可以这么作:class adapter第第 4 章章 gof-结构型模式结构型模式13vc+中可以多重继承,但在java中不行,所以在java中若要采用class adapter,必须作点修改,一方面继承adaptee,一方面实现target的接口:class adapter第第 4 章章 gof-结构型模式结构型模式14代码的实现是这样的: public class adapter extends ad

12、aptee implements target / .当然,这必须您原先的target定义了共同的接口,所以class adapter在java中适用的场合较少,事实上,也比较建议使用object adapter,这样的adapter模式比较有弹性,例如,您可以在adapter上加上个setter,以随时可以抽换adaptee。class adapter第第 4 章章 gof-结构型模式结构型模式15上面讲的是单个适配,看一个多适配的例子:如果有someclass类别与otherclass类别,您想要someandother类别可以同时拥有someclass类别与 otherclass类别中已

13、定义好的操作,并可以进行多型操作,在c+中可以用多重继承来达到,但在java中显然的无法使用多重继承,怎么办? class adapter第第 4 章章 gof-结构型模式结构型模式16可以在设计上先绕个弯,先使用两个接口分别定义好someclass与otherclass两个类别的公开方法,例如:public interface isome public void dosome();public interface iother public void doother();class adapter第第 4 章章 gof-结构型模式结构型模式17接着让someclass与otherclass分

14、别实现两个接口:public class someclass implements isome public void dosome() . public class otherclass implements iother public void doother() . class adapter第第 4 章章 gof-结构型模式结构型模式18someandother可以这样:public class someandother extends someclass implements iother private iother other = new otherclass(); public

15、 void doother() other.doother(); class adapter虽不满意,但至少解决了问题虽不满意,但至少解决了问题缺陷在哪里?第第 4 章章 gof-结构型模式结构型模式19object adapterv与类的适配器一样,对象的适配器把被适配的类的api转化成目标类的apiv不同的是,对象的适配器不是通过继承来适配,而是通过代理来适配v其类图如下:第第 4 章章 gof-结构型模式结构型模式20object adapter第第 4 章章 gof-结构型模式结构型模式21v可以看出,涉及的角色有:1.目标(target)角色2.源(adaptee)角色3.适配器(a

16、dapter)角色 adapter与adaptee是委派关系,这个特性决定了这个适配器模式是对象的。object adapter第第 4 章章 gof-结构型模式结构型模式22现在来看前面的例子:如果有someclass类别与otherclass类别,您想要someandother类别可以同时拥有someclass类别与 otherclass类别中已定义好的操作object adapter第第 4 章章 gof-结构型模式结构型模式23假设someclass类别有some1,some2方法otherclass类别有other1,other2,other3方法那么someandother类别如何实现呢?object adapter第第 4 章章 gof-结构型模式结构型模式24class someandother private someclass sm; private otherclass ot;public

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论