第4章结构型模式实训_第1页
第4章结构型模式实训_第2页
第4章结构型模式实训_第3页
第4章结构型模式实训_第4页
第4章结构型模式实训_第5页
已阅读5页,还剩7页未读, 继续免费阅读

下载本文档

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

文档简介

第4章结构型模式实训实训练习4.3.1选择题某公司开发一个文档编辑器,该编辑器允许在文档中直接嵌入图形对象,但开销很大。用户在系统设计之初提出编辑器在打开文档时必须十分迅速,可以暂时通过一些符号来表示相应的图形。针对这种需求,公司可以采用()避免同时创建这些图形对象。代理模式 B.外观模式C.桥接模式 D.组合模式下面的()模式将对象组合成树形结构以表示“部分-整体”的层次结构,并使得用户对单个对象和组合对象的使用具有一致性。组合(Composite) B.桥接(Bridge)C.装饰(Decorator) D.外观(Facade)3.采用(已知某子系统为外界提供功能服务,但该子系统中存在很多粒度十分小的类,不便被外界系统直接使用,3.采用(Facade(外观) B.Singleton(单例)C.Participant(参与者)D.Decorator(装饰)4.当不能采用生成子类的方法进行扩充时,可采用()设计模式动态地给一个对象添加一些额外的职责。4.Facade(外观) B.Singleton(单例)C.Participant(参与者)D.Decorator(装饰)(①)设计模式将抽象部分与它的实现部分相分离,使它们都可以独立地变化。下图为该设计模式的类图,其中,(②)用于定义实现部分的接口。A.SingletonA.Singleton(单例)C.Composite(组合)A.AbstractionC.ConcreteImplementorBB.Bridge(桥接)D.Facade(外观)ConcreteImplementorAD.Implementor(①)限制了创建类的实例数量,而(②)将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。A.命令模式(Command) B.适配器模式(Adapter)策略模式(Strategy) D.单例模式(Singleton)A.命令模式(Command) B.适配器模式(Adapter)C.策略模式(Strategy) D.单例模式(Singleton)一个树形文件系统体现了()模式。Decorator(装饰) B.Composite(组合)C.Bridge(桥接) D.Proxy(代理)当应用程序由于使用大量的对象,造成很大的存储开销时,可以采用()设计模式运用共享技术来有效地支持大量细粒度对象的重用。Facade(外观) B.Composite(组合)C.Flyweight(享元) D.Adapter(适配器)当想使用一个已经存在的类,但其接口不符合需求时,可以采用()设计模式将该类的接口转换成我们希望的接口。命令(Command) B.适配器(Adapter)C.装饰(Decorator) D.享元(Flyweight)以下关于适配器模式的叙述错误的是()。适配器模式将一个接口转换成客户希望的另一个接口,使得原本接口不兼容的那些类可以一起工作在类适配器中,Adapter和Adaptee是继承关系,而在对象适配器中,Adapter和Adaptee是关联关系类适配器比对象适配器更加灵活,在Java、C#等语言中可以通过类适配器一次适配多个适配者类适配器可以在不修改原来的适配者接口Adaptee的情况下将一个类的接口和另一个类的接口匹配起来现需要开发一个文件转换软件,将文件由一种格式转换为另一种格式,如将XML文件转换为PDF文件,将DOC文件转换为TXT文件,有些文件格式转换代码已经存在,为了将已有的代码应用于新软件,而不需要修改软件的整体结构,可以使用()设计模式进行系统设计。适配器(Adapter) B.组合(Composite)C.外观(Facade) D.桥接(Bridge)在对象适配器中,适配器类(Adapter)和适配者类(Adaptee)之间的关系为( )。关联关系 B.依赖关系C.继承关系 D.实现关系()是适配器模式的应用实例。操作系统中的树形目录结构Windows中的应用程序快捷方式Java事件处理中的监听器接口JDBC中的数据库驱动程序以下陈述不属于桥接模式优点的是()。分离接口及其实现部分,可以独立地扩展抽象和实现可以使原本由于接口不兼容而不能一起工作的那些类一起工作可以取代多继承方案,比多继承方案扩展性更好符合开闭原则,增加新的细化抽象和具体实现都很方便以下关于桥接模式的叙述错误的是()。桥接模式的用意是将抽象化与实现化脱耦,使得两者可以独立地变化桥接模式将继承关系转换成关联关系,从而降低系统的耦合度桥接模式可以动态地给一个对象增加功能,这些功能也可以动态地撤销桥接模式可以从接口中分离实现功能,使得设计更具扩展性()不是桥接模式所适用的场景。一个可以跨平台并支持多种格式的文件编辑器一个支持多数据源的报表生成工具,可以以不同图形方式显示报表信息一个可动态选择排序算法的数据操作工具一个支持多种编程语言的跨平台开发工具以下关于组合模式的叙述错误的是()。组合模式对叶子对象和组合对象的使用具有一致性组合模式可以通过类型系统来对容器中的构件实施约束,可以很方便地保证在一个容器中只能有某些特定的构件组合模式将对象组织到树形结构中,可以用来描述整体与部分的关系组合模式使得可以很方便地在组合体中加入新的对象构件,客户端不需要因为加入新的对象构件而更改代码下图是()模式的结构图。A.模板方法 B.命令 …C.单例 D.组合现需要开发一个XML文档处理软件,可以根据关键字查询指定内容,用户可以在XML中任意选取某一节点为查询的初始节点,无须关心该节点所处的层次结构。针对该需求,可以使用()模式来进行设计。A.AbstractFactory(抽象工厂) B.Flyweight(享元)Composite(组合) D.Strategy(策略)某公司欲开发一个图形控件库,要求可以在该图形控件库中方便地增加新的控件,而且可以动态地改变控件的外观或给控件增加新的行为,如可以为控件增加复杂的立体边框、增加控件的鼠标拖拽行为等。针对上述需求,使用()模式来进行设计最合适。A.适配器(Adapter) B.装饰(Decorator)C.外观(Facade) D.命令(Command)以下()不是装饰模式的适用条件。要扩展一个类的功能或给一个类增加附加责任要动态地给一个对象增加功能,这些功能还可以动态撤销要动态组合多于一个的抽象化角色和实现化角色要通过一些基本功能的组合而产生复杂功能,而不使用继承关系JavaIO库的设计使用了装饰模式,局部类图如下所示,在该类图中,类 (①)充当具体构件ConcreteComponent,类(②)充当抽象装饰器Decorator,类(③)充当具体装饰器ConcreteDecorator。

A.OutputstreamC.FilterOutputStreamA.OutputstreamC.FilterOutputStreamA.OutputstreamC.FilterOutputStreamFileOutputStreamD.BufferedOutputStreamFileOutputStreamA.OutputstreamC.FilterOutputStreamA.OutputstreamC.FilterOutputStreamA.OutputstreamC.FilterOutputStreamFileOutputStreamD.BufferedOutputStreamFileOutputStreamD.BufferedOutputStreamFileOutputStreamBufferedOutputStream23.下图是()模式的类图。B.工厂方法(FactoryMethod)模板方法(TemplateMethod)D.外观(Facade)以下关于外观模式的叙述错误的是()。外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的外观对象进行在增加外观对象之后,客户类只需要直接和外观对象交互即可,子系统类间的复杂关系由外观类来实现,降低了系统的耦合度外观模式可以很好地限制客户使用子系统类,对客户访问子系统类做限制可以提高系统的灵活性如果一个系统有好几个子系统的话,可以提供多个外观类在享元模式中,外部状态是指()。A.享元对象可共享的所有状态享元对象可共享的部分状态由享元对象自己保存和维护的状态由客户端保存和维护的状态以下关于享元模式的叙述错误的是()。

享元模式运用共享技术有效地支持大量细粒度对象的复用在享元模式中可以多次使用某个对象,通过引入外部状态使得这些对象可以有所差异享元对象能够做到共享的关键是引入了享元池,在享元池中通过克隆方法向客户端返回所需对象在享元模式中,外部状态是随环境改变而改变、不可以共享的状态,而内部状态是不随环境改变而改变、可以共享的状态为了节约系统资源,提高程序的运行效率,某系统在实现数据库连接池时可以使用()设计模式。A.外观(Facade) B.原型(Prototype)代理(Proxy) D.享元(Flyweight)毕业生通过职业介绍所找工作,该过程蕴含了()模式。A.外观(Facade) B.命令(Command)代理(Proxy) D.桥接(Bridge)代理模式有多种类型,其中智能引用代理是指()。为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果保护目标不让恶意用户接近使几个用户能够同时使用一个对象而没有冲突当一个对象被引用时,提供一些额外的操作,如将此对象被调用的次数记录下来以下关于代理模式的叙述错误的是()。代理模式能够协调调用者和被调用者,从而在一定程序上降低系统的耦合度控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限时可以考虑使用远程代理代理模式的缺点是请求的处理速度会变慢,并且实现代理模式需要额外的工作代理模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用4.3.2填空题1.某公司欲开发一款儿童玩具汽车,为了更好地吸引小朋友的注意力,该玩具汽车在移动过程中伴随着灯光闪烁和声音提示,在该公司以往的产品中已经实现了控制灯光闪烁和声音提示的程序,为了重用先前的代码并且使得汽车控制软件具有更好的灵活性和扩展性,使用适配器模式设计该系统,所得类图如图1所示。ClientCarController

{abstract}CarAdapter-ClientCarController

{abstract}CarAdapter-sound:Sound-lamp:Lamp+move()+move()+sound()+light()+CarAdapter()+sound()+light()ConcreteSoundSound{abstract}Lamp

{abstract}ConcreteLampConcreteSoundSound{abstract}Lamp

{abstract}ConcreteLamp+phonate()+phonate()+twinkle()+phonate()+phonate()+twinkle()图1类图在图1中,CarController类是汽车控制器,它包括三个方法用于控制汽车的行为,其中move()用于控制汽车的移动,sound()用于控制汽车的声音,light()用于控制汽车灯光的闪烁,sound()和light()是抽象方法。Sound类是抽象声音类,其方法phonate()用于实现声音提示,在其子类ConcreteSound中实现了该方法;Lamp类是灯光类,其方法twinkle()用于实现灯光闪烁,在其子类ConcreteLamp中实现了该方法。CarAdapter充当适配器,它通过分别调用Sound类的phonate()方法和Lamp类的twinkle()方法实现声音播放和灯光闪烁。【Java代码】

abstractclassSound现欲实现一个图像浏览系统,要求该系统能够显示BMP、JPEG和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG和GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接设计模式进行设计所得类图如图1所示。图1类图采用该设计模式的原因在于:系统解析BMP、JPEG与GIF文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。【Java代码】南京办事处人

力资源部南京办事处财

务部南京办事处人

力资源部南京办事处财

务部图1组织结构图FinanceDepartmentHRDepartmentConcreteCompany+Add(Companyc):void+Add(Companyc):void+Add(Companyc):void+Delete(Companyc):void+Delete(Companyc):void+Delete(Companyc):void■■■■■■图2类图■■■其中Company为抽象类,定义了在组织结构图上添加(Add)和删除(Delete)分公司/办事处或者部门的方法接口。类ConcreteCompany表示具体的分公司或者办事处,分公司或办事处下可以设置不同的部门。类HRDepartment和FinanceDepartment分别表示人力资源部和财务部。【Java代码】import.*;(1)Company{protectedStringname;publicCompany(Stringname){ (2) =name;}publicabstractvoidAdd(Companyc);dd(c);}publicvoidDelete(Companyc){ (6).remove(c);}}classHRDepartmentextendsCompany{publicHRDepartment(Stringname){super(name);}某公司欲开发一套手机来电提示程序,在最简单的版本中,手机在接收到来电时会发出声音来提醒用户;在振动版本中,除了声音外,在来电时手机还能产生振动;在更高级的版本中手机不仅能够发声和产生振动,而且还会有灯光闪烁提示。现采用装饰设计模式来设计,得到如图1所示的类图。Cellphone+receiveCall+receiveCall():voidphoneJarPhoneComplexPhone+JarPhone(Cellphonephone)+receiveCall() :void+ComplexPhone(Cellphonephone)+receiveCall() :void■■■ ■■■图1类图其中Cellphone为抽象类,声明了来电方法receiveCall(),SimplePhone为简单手机类,提供了声音提示,JarPhone和ComplexPhone分别提供了振动提示和灯光闪烁提示。PhoneDecorator是抽象装饰者,它维持一个对父类对象的引用。【Java代码】abstractclassCellphone{publicabstractvoidreceiveCall();}classSimplePhoneextendsCellphone{publicvoidreceiveCall(){"声音提示");}}classPhoneDecoratorextendsCellphone{private(1)phone=null;publicPhoneDecorator(Cellphonephone){if(phone!=null){ (2 ;}else{=newSimplePhone();}}publicvoidreceiveCall(){ (3 ;}}classJarPhoneextendsPhoneDecorator{publicJarPhone(Cellphonephone){ (4 ;}publicvoidreceiveCall(){();"振动提示");}}classComplexPhoneextendsPhoneDecorator{publicComplexPhone(Cellphonephone){ (5 ;}publicvoidreceiveCall(){();"灯光闪烁提示");

publicstaticvoidmain(Stringa[])Cellphonep1=new (6) publicstaticvoidmain(Stringa[])Cellphonep1=new (6) 某信息系统需要提供一个数据读取和报表显示模块,可以将来自不同类型文件中的数据转换成XML格式,并对数据进行统计和分析,然后以报表方式来显示数据。由于该过程需要涉及到多个类,因此使用外观模式进行设计,其类图如图1所示:AbstractFacade{abstract}+execute()XMLFacadeExtendedFacade+execute()L.+execute()FileOperationXMLDataConvertorDataAnalysisReportDisplay+read()+convert()+handle()+display()图1类图在图1中,FileOperation类用于读取文件、XMLDataConvertor类用于将不同格式的文件转换为XML格式、DataAnalysis类用于对XML数据进行统计分析、ReportDisplay类用于显示报表。为了让系统具有更好的扩展性,在系统设计中引入了抽象外观类AbstractFacade,它拥有多个不同的子类,如XMLFacade,它用于与读取、分析和显示XML数据的类交互,ExtendedFacade类用于与读取、转换、分析和显示非XML数据的类交互。【Java代码】classFileOperation{publicStringread(StringfileName){ 某软件公司欲开发一个多功能文本编辑器,在文本中可以插入图片、动画、视频等多媒体资料,为了节约系统资源,使用享元模式设计该系统,所得类图如图1所示:location-x:int-y:int ++location-x:int-y:int ++++土Location(intx,inty)getX()setX(intx)getY()setY(inty)企 :int:void:int:voidSize-width:int-height:int +Size(intwidth,intheight)+getWidth() : int+setWidth(int width) : void+getHeight() : int+setHeight(int^eight) : void MiiltimediaFileFactory -ht:Hashtable-fileNum:int =0 +MultimediaFileFactory()+getMultimediaFile(StringfileName):MultimediaFile+getFileNum() dni MultimediaFile {abstract}size:Sizelocation:Location+display()+setSize(Sizesize)+setlocation:void:void(.locatjonlocation):void图1类图在图1中,MultimediaFile表示抽象享元,其子类Image、Animation和Video表示具体享元。对于相同的多媒体文件,其大小Size和位置Location可以不同,因此需要通过 Setter方法来设置这些外部状态。MultimediaFileFactory是享元工厂,在其中定义一个Hashtable对象作为享元池,存储和维护享元对象。【Java代码】intubound=;StringextendName=strArray[ubound-1];if(fileName))return(MultimediaFile) (4) ;elseif("gif")||("jpg"))MultimediaFilefile=newImage(fileName);(fileName,file);fileNum++;elseif("swf"))MultimediaFilefile=newAnimation(fileName);(fileName,file);(5;

某信息咨询公司推出收费的在线商业信息查询模块,需要对查询用户进行身份验证并记录查询日志,以便根据查询次数收取查询费用,现使用代理模式设计该系统,所得类图如图1所示:图1类图在图1中,AccessValidator类用于验证用户身份,它提供方法validate()来实现身份验证;Logger类用于记录用户查询日志,它提供方法log()来保存日志;RealSearcher类

温馨提示

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

最新文档

评论

0/150

提交评论