您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 软件设计模式(JAVA)习题答案
专业资料word完美格式软件设计模式(Java版)习题第1章软件设计模式基础1.1软件设计模式概述1.2UML中的类图1.3面向对象的设计原则一、名词解释1.一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的基础上扩展一个系统的行为。2.一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。3.在软件中如果能够使用基类对象,那么一定能够使用其子类对象。4.是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。二、单选择题1.(A)2.(A)3.(A)4.(D)5.(D)6.(A)7.(D)8.(D)9.(D)10.(E)11.(C)12.(C)13.(A)三、多选择题1.(A、B、C、D)2.(A、B)3.(A、D)4.(A、B、C、D)四、填空题1.依赖倒转、迪米特法则、单一职责2.模式名字、目的、问题、解决方案、效果、实例代码3.超类、子类4.开闭5.用户6.依赖倒转7.组合/聚合8.结构型、行为型9.依赖倒转10.开闭11.需求收集是否正确、体系结构的构建是否合理、测试是否完全12.人与人之间的交流13.接口14.名称、目的、解决方案15.对象组合、类继承专业资料word完美格式16.对象组合17.对象组合、类继承18.抽象类的指针五、简答题1.答:设计模式按类型分为以下三类:1)创建型设计模式:以灵活的方式创建对象集合,用于管理对象的创建。2)结构型设计模式:将己有的代码集成到新的面向对象设计中,用于处理类或对象的组合。3)行为型设计模式:用于描述对类或对象怎样交互和怎样分配职责。2.答:设计模式的主要优点如下:1)设计模式融合了众多专家的经验,并以一种标准的形式供广大开发人员所用,它提供了一套通用的设计词汇和一种通用的语言以方便开发人员之间沟通和交流,使得设计方案更加通俗易懂。2)设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式使得重用成功的设计更加容易,并避免那些导致不可重用的设计方案。3)设计模式使得设计方案更加灵活,且易于修改。4)设计模式的使用将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本。5)设计模式有助于初学者更深入地理解面向对象思想,一方面可以帮助初学者更加方便地阅读和学习现有类库与其他系统中的源代码,另一方面还可以提高软件的设计水平和代码质量。3.答:设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式,其中的关键元素包括模式名称、问题、解决方案和效果。4.答:正确使用设计模式具有以下优点:⑴可以提高程序员的思维能力、编程能力和设计能力。⑵使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。⑶使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。5.答:根据类与类之间的耦合度从弱到强排列,UML中的类图有以下几种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。专业资料word完美格式6.答:1)开闭原则(OCP):它要求软件实体应当对扩展开放,对修改关闭;2)里氏替换原则(LSP):它要求继承必须确保超类所拥有的性质在子类中仍然成立;3)依赖倒置原则(DIP):它要求软件设计要面向接口编程,不要面向实现编程;4)单一职责原则(SRP):它要求对象不应该承担太多职责,一个类应该有且仅有一个引起它变化的原因;5)接口隔离原则(ISP):它要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法;6)迪米特法则(LoD):它要求如果两个软件实体无须直接通信,就不应当直接相互调用,而通过第三方转发该调用;7)合成复用原则(CRP):它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。第2章创建型模式(上)2.2单例模式2.3原型模式一、单选择题1.(A)2.(B)3.(A)4.(D)5.(C)6.(B)7.(B)二、多选择题1.(C)2.(A,B)3.(A、B)4.(A、B、C)5.(A、C)6.(A、B、C、D)7.(A,B,C,D)三、填空题1.对象的创建、使用分离、耦合度2.创建型3.创建性4.懒汉式单例、饿汉式单例5.抽象原型类、具体原型类四、程序分析题解:本题使用了单例模式,参考类图如下所示:专业资料word完美格式五、简答题1.答:创建型模式分为以下几种:⑴单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。⑵原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。⑶工厂方法(FactoryMethod)模式:定义一个用于创建产品的接口,由子类决定生产什么产品。⑷抽象工厂(AbstractFactory)模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。⑸建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。2.答:单例模式重点在于在整个系统上共享一些创建时较耗资源的对象。整个应用中只维护一个特定类实例,它被所有组件共同使用。Java.lang.Runtime是单例模式的经典例子。从Java5开始你可以使用枚举(enum)来实现线程安全的单例。3.答:单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。特点:1)单例类只有一个实例对象;2)该单例对象必须由单例类自行创建;3)单例类对外提供一个访问该单例的全局访问点。应用场景:1)在某类只要求生成一个对象的时候;2)当对象需要被共享的场合;3)当某类需要频繁实例化,而创建的对象又频繁被销毁的时候。4.答:原型模式通常适用以下场景:1)对象之间相同或相似,即只是个别的几个属性不同的时候;2)对象的创建过程比较麻烦,但克隆比较简单时候。原型模式可扩展为:带原型管理器的原型模式,它在原型模式的基础上增加了一个原型管理器PrototypeManager类。专业资料word完美格式第3章创建型模式(下)3.1工厂方法模式3.2抽象工厂模式3.3建造者模式一、单选择题1.(B)2.(A)3.(C)4.(C)5.(D)6.(C)7.(B)8.(A)9.(A)10.(A)二、多选择题1.(A、B、C、D)2.(A、B、C、D)3.(A、C)三、填空题1.工厂方法、抽象工厂2.简单工厂3.抽象工厂(AbstractFactory)、具体工厂(ConcreteFactory)、抽象产品(Product)4.工厂方法、多个等级的产品5.抽象建造者(Builder)、具体建造者(ConcreteBuilder)、指挥者(Director)五、简答题1.答:工厂模式的最大好处是增加了创建对象时的封装层次。如果你使用工厂来创建对象,之后你可以使用更高级和更高性能的实现来替换原始的产品实现或类,这不需要在调用层做任何修改。应用场合是常常有新的对象类型要被添加进来,但你所关心的仅仅是方法的接口,不关心其实现细节,本书中已经详细地介绍了其好处和应用环境。2.答:工厂方法模式的主要优点有:1)用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;2)在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无需对原工厂进行任何修改,满足开闭原则。其缺点是:每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。3.答:工厂方法模式中考虑的是一类产品的生厂,如:电视机工厂;而抽象工厂模式考虑多类产品的生产,如:电器工厂。工厂方法模式通常适用以下场景:1)客户只知道创建产品的工厂名,而不知道具体的产品名。如:TCL电视工厂、海信电视工厂等;2)创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。3)客户不关心创建产品的细节,只关心产品的品牌。专业资料word完美格式抽象工厂模式通常适用以下场景:1)当需要创建的对象是一系列相互关联或相互依赖的产品族时,如:电器工厂中的电视机、洗衣机、空调等;2)系统中有多个产品族,但每次只使用其中的某一族产品。如:有的粉丝只喜欢穿李宁牌的衣、裤和鞋;3)系统中提供了产品的类库,且所有产品的接口相同,客户端不依赖产品实例的创建细节和内部结构。4.答:产品的种类称为产品等级,而一个具体工厂所生产的位于不同等级的一组产品称为一个产品族。5.答:建造者模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。该模式的主要优点是:1)各个具体的建造者相互独立的,有利于系统的扩展;2)客户端不必知道产品内部组成的细节,便于控制细节风险。其缺点是:1)产品的组成部分必须相同,这限制了其使用范围;2)如果产品的内部变化复杂,该模式会增加很多的建造者类。建造者模式通常在以下场合使用:1)创建的对象较复杂,由多个部件构成,各部件面临着复杂的变化,但构件间的建造顺序是稳定的;2)创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的。六、编程题说明:1-5编程题可参考本章节的实例自己实现。第4章结构型模式(上)4.2代理模式4.3适配器模式4.4桥接模式一、单选择题1.(A)2.(A)3.(D)4.(B)5.(A)6.(C)7.(D)二、多选择题1.(A、D)2.(A、B、D)3.(A、C、D)4.(A、B、C)三、填空题1.适配器(Adapter)模式、桥接(Bridge)模式、装饰(Decorator)模式、外观(Facade)模式、享元(Flyweight)模式2.真实主题(RealSubject)类、代理(Proxy)类3.动态代理模式4.继承、组合/聚合专业资料word完美格式5.适配者(Adaptee)类、适配器(Adapter)类6.桥接7.适配器四、程序分析题解:1)本题使用了代理器模式;2)其参考结构图如下所示:五、简答题1.答:代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。代理模式有以下的应用场景:1)为了隐藏目标对象存在于不同地址空间的事实,方便客户端访问时;2)要创建的目标对象开销很大时;3)控制不同种类客户对真实对象的访问权限时;4)当调用目标对象需要附加一些额外的处理功能时;5)为了提高系统的性能,需延迟对目标的加载时。2.答:代理模式的主要优点有:1)代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;2)代理对象可以扩展目标对象的功能;3)代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度。其主要缺点是:1)在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢;2)增加了系统的复杂度。专业资料word完美格式3.答:远程代理:这种方式通常是为了隐藏目标对象存在于不同地址空间的事实,方便客户端访问。例如用户申请某些网盘空间时,会在用户的文件系统中建立一个虚拟的硬盘,用户访问它实际访问的是网盘空间。虚拟代理:这种方式通常用于要创建的目标对象开销很大时。比如下载一幅很大的图像需要很长时间,因某种计算比较复杂而短时间无法完成,这时可以先用小比例的虚拟代理替换真实的对象,消除用户对服务器慢的感觉。安全代理:这种方式通常用于控制不同种类客户对真实对象的访问权限。4.答:适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式2种,前者类之间的耦合度比后者高,
本文标题:软件设计模式(JAVA)习题答案
链接地址:https://www.777doc.com/doc-1352294 .html