软件设计模式复习题_第1页
软件设计模式复习题_第2页
软件设计模式复习题_第3页
软件设计模式复习题_第4页
软件设计模式复习题_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、1.简述“开闭”原则的基本本思想。请举举出一个使用用了软件“开闭”原则的软件件设计模式,其其中何处体现现了“开闭”原则。答:“开闭”原则:软件件实体应当对对扩展开放,而而对修改关闭闭,“开-闭”原则要求软软件系统能够够在不需要修修改原有类的的基础上,通通过增加类达达到扩展功能能的目的。Abstracct facctory体现了这个个原则,如果果想增加一类类新的produucts,只需在produuct类体系中增增加各个produucts,然后在factorry类体系结构构中增加一个个concreete faactoryy就可以了,而而不需要对现现有类做任何何修改,The OOpen-cclos

2、edd prinncipleeocp在不改动过过模块源代码码的情况下扩扩展模块的行行为。软件实体(类模模块 函数等)应应该是可以扩扩展的,但是是不可以修改改的。2.简述依赖例例转原则的基基本思想。请请举出一个使使用了软件依依赖原则的软软件设计模式式,其中何处处体现了依赖赖原则。答:依赖倒置原原则的基本思思想是:高层模块不不应该依赖于于低层模块,二二者都应该依依赖于抽象。抽象不应该该依赖于细节节,细节应该不不依赖于抽象象。Tomplatte metthod就体现了这这个原则,它它定义了一个个操作中的算算法骨架,而而将一些步骤骤延迟到子类类中,templlate mmethod使得子类不不改变一个

3、算算法的结构,即即可重定义该该算法的某些些特定步骤。 3.什么是单一一职责原则?请举出一个个使用了单一一职责原则的的软件设计模模式,其中何何处体现了单单一职责原则则。答:基本思想:SRP使得一个类类或一个模块块承担的责任任尽可能的少少,使尽可能能少的因素或或动机影响该该类或该模块块,即增大类类或模块的内内聚性,减少少其耦合度,SRP是所有原则则中最简单的的之一,也是是最难正确运运用的之一。COMMANDD模式体现了SRP原则,大多多数类都是一一组方法和相相应的一组变变量的结合,而而该模式只是是封装了一个个没有任何变变量的函数,它它对函数的关关注超过了类类,将一个请请求封装为一一个对象,从从而可

4、用不同同的请求对客客户进行参数数化。4.软件复用可可采用类的继继承方式和类类的聚合方式式,比较两者者的优缺点。答:聚合:一个个对象拥有另另一个对象或或对另一个对对象负责(即即一个对象包包含另一个对对象或是另一一个对象的一一部分)并且且聚合对象和和其所有具有有相同的生命命周期(即所所谓的“同生共死”关系)。聚合复用优点:容器类仅能能通过被包含含对象的接口口来对其进行访问。“黑盒”复用,因为为被包含对象象的内部细节节对外是不可可见。包装性好。实现上的相相互依赖性比比较小。每一个类只只专注于一项项任务。通过获取指指定其他的具具有相同类型型的对象的使使用,可以在在运行期间动动态地定义(对对象的)组合合

5、。聚合的缺点:导致系统中中的对象过多多 为了能将多多个不同的对对象作为组合合块来使用,必必须仔细地对对接口进行定定义。类继承:是一种种通过扩展(一一个已有对象象的)实现,从从而获得新功功能的复用方方法。继承的优点:容易进行新新的实现,因因为其大多数数可继承而来来 易于修改或或扩展那些被被复用的实现现。继承的缺点:破坏了封装性,因为这会会将父类的实实现细节暴露露给子类 “白盒”复用,因为为父类的内部部细节对于子子类而言通常常是可见的 当父类的实实现更改时,子子类也不得不不随之更改 从父类继承承来的实现将将不能在运行行期间进行改改变。5.画出工厂方方法模式的结结构图。什么么情况下适合合使用工厂方方

6、发模式?其中produuct:为工厂模模式所要创建建的对象类型型定义一个接接口。Concrette prooduct:实现produuct接口。Creatorr:声明工厂厂方法(factoory meethod)返回值为produuct的一个对象象。Concrette creeator:覆写factoory Meethod(),返回值为concrrete pproducct 的一个具体体实例。在下面情况下你你可以考虑使使用工厂方法法模式: 1) 当客户户程序不需要要知道要使用用对象的创建建过程。 2) 客户程程序使用的对对象存在变动动的可能,或或者根本就不不知道使用哪哪一个具体的的对象。6.画

7、出合成模模式(Compoosite)的结构图图。举例说明明一个可以应应用合成模式式的软件设计计实例,说明明其中各角色色的作用。实例:计算机和和立体组合音音响这样的设设备经常被组组装成一部分分整体层次结结构或者是容容器层次结构构,例如:底底盘可以包含含驱动装置和平面面板,总线含含有多个插件件,机柜包括括底盘、总线线等。这样结结构很自然的的用compoosite模式进行模模拟。Equipmeent类为在部分整体层次结构构中的所有设设备定义一个个接口。Equippment声明一些操操作返回一个个设备的属性性,例如它的的能是消耗和和价格。子类类为指定的设设备实现了这这些操作,Equippment还声明

8、了一一个Creatte Iteeratorr 操作,该操操作为访问它它的零件返回回一个Iteraator ,这个操作的的缺省实现返返回一上NullIIterattor,它在空集集上迭代。Composiite Eqquipmeent是包含其它设备备的基类,它它也是Equipmment的子类。7.简述门面模模式(Facadde)和中介者者模式(Mediaator)的基本思思想,两者的的差异何在?答:门面模式(facadde)又称外观观模式。基本本思想:为子子系统中的一一组接口提供供一个一致的的界面, Facaade模式定义了了一个高层接接口,这个接接口使得这一一子系统更加加容易使用。“中介者模式”

9、基本思想:Mediaator PPatterrn 中文译为“中介者模式”、“调停者模式”。调停者模模式的定义是是:用一个调调停对象来封封装一系列的的对象交互。调调停者使各对对象不需要显显式地相互引引用,从而使其耦合松散散,而且可以以独立地改变变它们之间的的交互。简单单点来说,将将原来两个直直接引用或者者依赖的对象象拆开,在中中间加入一个“调停”对象,使得得两头的对象象分别和“调停”对象引用或或者依赖。两者的差异: 从目的上看看,调停者模模式与门面模模式有些相似似。 但是门面模模式是介于客客户程序与子子系统之间的的,而调停者者模式是介于于子系统与子子系统之间的的。这也注定定了它们有很很大的区别:

10、门面模式是是将原有的复复杂逻辑提取取到一个统一一的接口,简简化客户对逻逻辑的使用。它它是被客户所所感知的,而而原有的复杂杂逻辑则被隐隐藏了起来。而而调停者模式式的加入并没没有改变客户户原有的使用用习惯,它是隐藏在原原有逻辑后面面的,使得代代码逻辑更加加清晰可用。8.简述观察者者模式的基本本思想,如何何实现当目标标对象发生变变化时多个观观察者对象的的同步更新?画出他们之之间的协作图图。(1)Obseerver(观察者)基基本思想:对对象间的一种种一对多的依依赖关系。当当一个对象的的状态发生变变化时,所有有依赖于它的的对象都得到到通知并自动动更新。(2)协作:当当Concrrete SSubjec

11、ct发生任何可可能导到其参参观者与其本本身状态不一一致的改变时时,它将通知知它的各个观观察者。在得得到一个具体体的目标改变变通知后,Concrrete OObjectt对象可向目目标对象查询询信息,Concrrete OObjectt使用这个些些信息以使它它的状态与目目标对象的状状态一致。(3)协作图:9.举一适合使使用State模式的例子子。与不使用用该模式相比比,有哪些优优点?举例:抽象状态态类定义了一一个抽象方法法“写程序”与不使用该模式式相比优点:State模式式将特定的状状态相关的行行为封装在一一个类中,由由于所有状态态相关的代码码都存在于某某个concrrete sstate中,所

12、以通通过定义新的的子类可以很很容易的增加加新的状态和和转换。10.有哪些模模式的使用可可以使得类的的复用性增强强?说明你的的理由。策略模式(sttrateggy) 属于对象行行为型模式,主主要定义一系系列的算法,把把这些算法一一个个封装成成拥有共同接接口的单独的的类,并使他他们之间互换换,客户端调调用他们的时时候互不影响响。算法使用用和算法分离离,即将变化化的具体算法法封装起来,降降低了代码的的耦合度,算算法提取起来来,使算法得得到重用。中介者模式(mmediattor) 用一个个调停对象来来封装一系列列的对象交互互。调停者使使各对象不需需要显式地相相互引用,从从而使其耦合合松散,而且且可以独

13、立地地改变它们之之间的交互。即即,将原来的的两个直接引引用或者依赖赖的对象拆开开,在中间加加入一个“调停”对象,使得得两头的对象象分别和“调停”对象引用或或者依赖。提提高了原有系系统的可读性性,将原有系系统的多对多多转化为一对对多,提高了了代码的可复复用性。适配器(Adaapter)模式 是的原本由由于接口不兼兼容而不能再再一起的那些些类可以一起起工作。如画画图程序中,已已实现绘制点点,直线等功功能。为了让让客户程序在在使用的时候候不用关心不不同定义,定定义个抽象类类规范接口,当当去实现绘图图时,发现系系统其它地方方已有制图实实现,但是系系统已有的方方法与抽象类类中规定方法法不一样,这这时候用

14、适配配器模式可以以解决这问题题。适配器模模式是为了面面向接口编程程中更好的复复用。11.比较Addapterr和Proxy模式使用上的的异同之处。适配器模式(AAdapteer):将一一个类的接口口转换成客户户希望的另外外一个接口。Adaptter 模式式使得原本由由于接口不兼兼容而不能一一起工作的那那些类可以一一起工作。代理模式有两个个英文名字:Proxyy Patttern 和 Surrrogatee Patttern。代代理模式:为为其他对象提提供一种代理理以控制对这这个对象的访访问。说白了了就是,在一一些情况下客客户不想或者者不能直接引引用一个对象象,而代理对对象可以在客客户和目标对对

15、象之间起到到中介作用,去去掉客户不能能看到的内容容和服务或者者增添客户需需要的额外服服务。两者的主要区别别在于代理模模式应用的情情况是不改变变接口命名的的,而且是对对已有接口功功能的一种控控制;而适配配器模式则强强调接口转换换。 12.说明Obbserveer模式的基本本实现方式。如如果不用该模模式,要达到到同样的效果果,你会如何何做?观察者模式在关关于目标角色色、观察者角角色通信的具具体实现中,有有两个版本。一种情况便是目目标角色在发发生变化后,仅仅仅告诉观察察者角色“我变化了”;观察者角角色如果想要要知道具体的的变化细节,则则就要自己从从目标角色的的接口中得到到。这种模式式被很形象的的称为

16、:拉模模式就是说变化化的信息是观观察者角色主主动从目标角角色中“拉”出来的。 还有一种方法,那那就是我目标标角色“服务一条龙”,通知你发发生变化的同同时,通过一一个参数将变变化的细节传传递到观察者者角色中去。这这就是“推模式”管你要不要要,先给你啦啦。 这两种模式的的使用,取决决于系统设计计时的需要。如如果目标角色色比较复杂,并并且观察者角角色进行更新新时必须得到到一些具体变变化的信息,则“推模式”比较合适。如果目标角色比较简单,则“拉模式”就很合适。 如果不使使用该模式,可可采用策略模模式,将不同的情情况作为子类类封装在一个个类中,模拟obseerver模模式中目标角角色的不同状状态,当外部

17、部状态发生变变化时,可以以选择不同的strattegy1、strattegy2改变观察者者角色,从而而达到与观察察者模式同样样的效果。13.请列举一一个使用装饰饰模式的例子子。画出你的的例子的类图图结构。JUnit 中中的装饰模式式:在 JUniit 中,TestCCase 是一个很重重要的类,允允许对其进行行功能扩展。 在 juniit.exttensioons 包中,TestDDecoraator、RepeaatedTeest 便是对 TesttCase 的装饰模式式扩展。下面面我们将它们们和上面的角角色对号入座座。14.列举两个个可以使我们们在程序中不不必使用ifelse结构的软件件设计

18、模式。使使用软件设计计模式是如何何做到这一点点的?策略模式(sttrateggy)和状态模模式(state)策略模式是将不不同算法(处处理方法)封封装到stateegy类中,状态态模式是将不不同状态封装装到statte类中。二二者都是通过过,类中的子子类,实现不不同情况的调调用,从而有有效的替换充充满在程序中中的 if eelse 语句。15.你认为在在Linux平台上直接接运行WIN32程序有可能能吗?如认为为不可能请说说明理由;如如认为可能应应如何实现这这一目标?(1)两个OSS内部实现有有很大差别,甚甚至连路径的的分隔符都不不一样,一个个WIN32程序无论如如何到了最后后也要调用Windoow apii,而这些api在linux上根本没有有实现(2)例如:就就用户界面来来说,有些windoows的控件,在Linux上根本连对对应的具有类类似功能的控控件都

温馨提示

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

评论

0/150

提交评论