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