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

下载本文档

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

文档简介

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

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

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

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

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

6、 从父类继继承来的实实现将不能能在运行期期间进行改改变。5.画出工工厂方法模模式的结构构图。什么么情况下适适合使用工工厂方发模模式?其中prooductt:为工厂厂模式所要要创建的对对象类型定定义一个接接口。Concrrete prodduct:实现prodduct接口。Creattor:声明工工厂方法(facttory methhod)返回值值为prodduct的一个对对象。Concrrete creaator:覆写facttory Methhod(),返回值值为conccretee prooductt 的一个具具体实例。在下面情况况下你可以以考虑使用用工厂方法法模式: 1) 当当客户程序序

7、不需要知知道要使用用对象的创创建过程。 2) 客客户程序使使用的对象象存在变动动的可能,或或者根本就就不知道使使用哪一个个具体的对对象。6.画出合合成模式(Comppositte)的结构构图。举例例说明一个个可以应用用合成模式式的软件设设计实例,说说明其中各各角色的作作用。实例:计算算机和立体体组合音响响这样的设设备经常被被组装成一一部分整体体层次结构构或者是容容器层次结结构,例如如:底盘可可以包含驱驱动装置和平平面板,总总线含有多多个插件,机机柜包括底底盘、总线线等。这样样结构很自自然的用comppositte模式进行行模拟。Equippmentt类为在部部分整体层次次结构中的的所有设备备定

8、义一个个接口。Equiipmennt声明一些些操作返回回一个设备备的属性,例例如它的能能是消耗和和价格。子子类为指定定的设备实实现了这些些操作,Equiipmennt还声明了了一个Creaate IIteraator 操作,该该操作为访访问它的零零件返回一一个Iterratorr ,这个操作作的缺省实实现返回一一上NulllIterratorr,它在空空集上迭代代。Compoositee Equuipmeent是包含其它设设备的基类类,它也是是Equiipmennt的子类。7.简述门门面模式(Facaade)和中介介者模式(Mediiatorr)的基本本思想,两两者的差异异何在?答:门面模模式

9、(facaade)又称外外观模式。基本思想想:为子系系统中的一一组接口提提供一个一一致的界面面, Faccade模式定义义了一个高高层接口,这这个接口使使得这一子子系统更加加容易使用用。“中介者模模式”基本思想想:Meddiatoor Paatterrn 中文译为“中介者模模式”、“调停者模模式”。调停者者模式的定定义是:用用一个调停停对象来封封装一系列列的对象交交互。调停停者使各对对象不需要要显式地相相互引用,从从而使其耦合松松散,而且且可以独立立地改变它它们之间的的交互。简简单点来说说,将原来来两个直接接引用或者者依赖的对对象拆开,在在中间加入入一个“调停”对象,使使得两头的的对象分别别和

10、“调停”对象引用用或者依赖赖。两者的差异异: 从目的上上看,调停停者模式与与门面模式式有些相似似。 但是门面面模式是介介于客户程程序与子系系统之间的的,而调停停者模式是是介于子系系统与子系系统之间的的。这也注注定了它们们有很大的的区别:门门面模式是是将原有的的复杂逻辑辑提取到一一个统一的的接口,简简化客户对对逻辑的使使用。它是是被客户所所感知的,而而原有的复复杂逻辑则则被隐藏了了起来。而而调停者模模式的加入入并没有改改变客户原原有的使用用习惯,它是隐藏在在原有逻辑辑后面的,使使得代码逻逻辑更加清清晰可用。8.简述观观察者模式式的基本思思想,如何何实现当目目标对象发发生变化时时多个观察察者对象的

11、的同步更新新?画出他他们之间的的协作图。(1)Obbservver(观察者者)基本思思想:对象象间的一种种一对多的的依赖关系系。当一个个对象的状状态发生变变化时,所所有依赖于于它的对象象都得到通通知并自动动更新。(2)协作作:当Conccretee Subbjectt发生任何何可能导到到其参观者者与其本身身状态不一一致的改变变时,它将将通知它的的各个观察察者。在得得到一个具具体的目标标改变通知知后,Conccretee Objject对象可向向目标对象象查询信息息,Conccretee Objject使用这个个些信息以以使它的状状态与目标标对象的状状态一致。(3)协作作图:9.举一适适合使用S

12、tatte模式的例例子。与不不使用该模模式相比,有有哪些优点点?举例:抽象象状态类定定义了一个个抽象方法法“写程序”与不使用该该模式相比比优点:Statee模式将特特定的状态态相关的行行为封装在在一个类中中,由于所所有状态相相关的代码码都存在于于某个conccretee staate中,所以以通过定义义新的子类类可以很容容易的增加加新的状态态和转换。10.有哪哪些模式的的使用可以以使得类的的复用性增增强?说明明你的理由由。策略模式(straategy) 属于对象象行为型模模式,主要要定义一系系列的算法法,把这些些算法一个个个封装成成拥有共同同接口的单单独的类,并并使他们之之间互换,客客户端调用

13、用他们的时时候互不影影响。算法法使用和算算法分离,即即将变化的的具体算法法封装起来来,降低了了代码的耦耦合度,算算法提取起起来,使算算法得到重重用。中介者模式式(mediiatorr) 用一一个调停对对象来封装装一系列的的对象交互互。调停者者使各对象象不需要显显式地相互互引用,从从而使其耦耦合松散,而而且可以独独立地改变变它们之间间的交互。即,将原原来的两个个直接引用用或者依赖赖的对象拆拆开,在中中间加入一一个“调停”对象,使使得两头的的对象分别别和“调停”对象引用用或者依赖赖。提高了了原有系统统的可读性性,将原有有系统的多多对多转化化为一对多多,提高了了代码的可可复用性。适配器(AAdapt

14、ter)模式 是的原本本由于接口口不兼容而而不能再一一起的那些些类可以一一起工作。如画图程程序中,已已实现绘制制点,直线线等功能。为了让客客户程序在在使用的时时候不用关关心不同定定义,定义义个抽象类类规范接口口,当去实实现绘图时时,发现系系统其它地地方已有制制图实现,但但是系统已已有的方法法与抽象类类中规定方方法不一样样,这时候候用适配器器模式可以以解决这问问题。适配配器模式是是为了面向向接口编程程中更好的的复用。11.比较较Adappter和Proxxy模式使用用上的异同同之处。适配器模式式(Adaapterr):将一一个类的接接口转换成成客户希望望的另外一一个接口。Adappter 模式使

15、得得原本由于于接口不兼兼容而不能能一起工作作的那些类类可以一起起工作。代理模式有有两个英文文名字:Proxxy Paatterrn 和 Surrrogaate PPatteern。代代理模式:为其他对对象提供一一种代理以以控制对这这个对象的的访问。说说白了就是是,在一些些情况下客客户不想或或者不能直直接引用一一个对象,而而代理对象象可以在客客户和目标标对象之间间起到中介介作用,去去掉客户不不能看到的的内容和服服务或者增增添客户需需要的额外外服务。两者的主要要区别在于于代理模式式应用的情情况是不改改变接口命命名的,而而且是对已已有接口功功能的一种种控制;而而适配器模模式则强调调接口转换换。 12

16、.说明明Obseerverr模式的基基本实现方方式。如果果不用该模模式,要达达到同样的的效果,你你会如何做做?观察者模式式在关于目目标角色、观察者角角色通信的的具体实现现中,有两两个版本。一种情况便便是目标角角色在发生生变化后,仅仅仅告诉观观察者角色色“我变化了”;观察者者角色如果果想要知道道具体的变变化细节,则则就要自己己从目标角角色的接口口中得到。这种模式式被很形象象的称为:拉模式就是说变变化的信息息是观察者者角色主动动从目标角角色中“拉”出来的。 还有一种方方法,那就就是我目标标角色“服务一条条龙”,通知你你发生变化化的同时,通通过一个参参数将变化化的细节传传递到观察察者角色中中去。这就

17、就是“推模式”管你要不不要,先给给你啦。 这两种模模式的使用用,取决于于系统设计计时的需要要。如果目目标角色比比较复杂,并并且观察者者角色进行行更新时必必须得到一一些具体变变化的信息息,则“推模式”比较合适适。如果目目标角色比比较简单,则“拉模式”就很合适。 如果果不使用该该模式,可可采用策略略模式,将不同的的情况作为为子类封装装在一个类类中,模拟obsserveer模式中中目标角色色的不同状状态,当外外部状态发发生变化时时,可以选择不不同的straategyy1、straategyy2改变观察察者角色,从从而达到与与观察者模模式同样的的效果。13.请列列举一个使使用装饰模模式的例子子。画出你

18、你的例子的的类图结构构。JUnitt 中的装装饰模式:在 JUnnit 中,TesttCasee 是一个很很重要的类类,允许对对其进行功功能扩展。 在 junnit.eextennsionns 包中,TesttDecooratoor、RepeeateddTestt 便是对 TesstCasse 的装饰模模式扩展。下面我们们将它们和和上面的角角色对号入入座。14.列举举两个可以以使我们在在程序中不不必使用ifelse结构的软软件设计模模式。使用用软件设计计模式是如如何做到这这一点的?策略模式(straategyy)和状态态模式(statte)策略模式是是将不同算算法(处理理方法)封封装到stat

19、tegy类中,状状态模式是是将不同状状态封装到到statte类中。二者都是是通过,类类中的子类类,实现不不同情况的的调用,从从而有效的的替换充满满在程序中中的 if elsee 语句。15.你认认为在Linuux平台上直直接运行WIN32程序有可可能吗?如如认为不可可能请说明明理由;如如认为可能能应如何实实现这一目目标?(1)两个个OS内部实现现有很大差差别,甚至至连路径的的分隔符都都不一样,一一个WIN332程序无论论如何到了了最后也要要调用Winddow aapi,而这些api在linuux上根本没没有实现(2)例如:就用户界界面来说,有有些winddows的控件,在在Linuux上根本连连对应的具具有类似功功能的控件件都没有怎怎么执行?如果再涉涉及进程,线线程就更复复杂了,差

温馨提示

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

评论

0/150

提交评论