一.选择
1. 设计模式具有的优点()。 A.适应需求变化 B.程序易于理解 C.减少开发过程中的代码开发工作量 D.简化软件系统的设计
2. 设计模式一般用来解决什么样的问题( )。 A.同一问题的不同表相 B不同问题的同一表相 C.不同问题的不同表相 D.以上都不是
3. 设计模式的两大主题是( )。 A.系统的维护与开发 B 对象组合与类的继承 C.系统架构与系统开发D.系统复用与系统扩展
4. 以下哪些问题通过应用设计模式不能够解决 。()
A)指定对象的接口 B)针对接口编程 C)确定软件的功能都正确实现 D)设计应支持变化
解答: 1. A 2. A 3. D 4. C
二.填空
1. 模式的基本要素包括名称、意图、问题、解决方案、参与者和协作者、( )、实现、G oF参考。
2. 设计模式基本原则包括:开闭原则,( ),包容变化原则。
3. 设计模式是一个( )的方案,它可以解决一类问题。
4. 1. 在设计模式群体中,效果是指( )。
解答: 1. 效果
2. 从场景进行设计的原则
3. 抽象
4. 原因和结果
三.判断
1. 适配器模式属于创建型模式。
2. 在设计模式中,“效果”只是指“原因和结果”。
3. 设计模式使代码编制不能真正工程化。
4. 设计模式的两大主题是系统复用与系统扩展。 解答: 1. 错 2. 对
3. 错 4. 对
四.名词解释 1. 设计模式 2. 模板
3. 模式
4. 内聚度
解答:
1. 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计 模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性
2. 模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
3. 就是解决某一类问题的方。把解决某类问题的方法总结归纳到理论高度,那就是模 式。 4.
五.简答题
1. 什么是设计模式?设计模式的目标是什么?
2. 设计模式的基本要素有哪些?
3. 设计模式中一般都遵循的原则有什么?
4. 四人团针对“创建优秀面向对象设计”建议了哪些策略?
解答:
1. 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
2. 设计模式的基本要素有:名称,意图,问题,解决方案,参与者和协作者,效果,实现 ,GOF参考。
3. 开-闭原则,根据场景进行设计原则,优先组合原则,包容变化原则。
4. 针对接口编程,优先使用对象组合而不是类继承,找到并封装变化点。
六.应用题 解答:
第6章 facade(外观)模式
一.选择
1. 外观模式的作用是()。 A.当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能。 B.为了系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易 使用。 C.保证一个类仅有一个实例,并提供一个访问他的全局访问点。 D.在方法中定义算法的框架,而将算法中的一些操作步骤延迟到子类中实现。
2. Façade(外观)模式的意图是()。 A. 希望简化现有系统的使用方法。你需要定义自己的借口。 B.将一个无法控制的现有对象与一个特定借口相匹配。 C. 将一组实现部分从另一组使用它们的对象中分离出来。 D.你需要为特定的客户(或情况)提供特定系列的对象。
3. ( )模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 A. Adapter(适配器)模式 B. Bridge(桥接)模式 C. Strategy(策略)模式 D.Facade (外观)模式
4. 下面属于结构模式的有()。 A观察者模式(Observer) B.单例模式(Singleton) C.策略模式(Strategy) D外观模式(Façade)
解答: 1. B 2. A 3. D 4. D
二.填空
1. Facade模式可以用来( )系统。该模式能够将系统作为自己的私有成员包含进来。
2. Façade模式需要解决的问题是:只需要使用一个复杂系统的一个()。或者,需要用一 种特殊的方式与系统交互。
3. Façade模式不仅可以为方法调用创建更( )的接口,还可以减少客户必须处理的对象 数量。
4. Façade外观模式的解决方案是向客户展现使用现有系统的一个新的( )。 解答: 1. 隐藏
2. 子集 3. 简单
4. 接口
三.判断
1. Façade(外观)模式不仅可以为方法调用创建更简单的接口,还可以减少客户必须处理 的对象数量。
2. 外观模式,当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的 功能。
3. Façade模式为子系统中的一组接口提供的界面可能不一致。
4. Façade外观模式只能为方法调用创建更简单的接口,不能减少客户必须处理的对象数量 。( )
解答: 1. 对
2. 错
3. 错
4. 错
四.名词解释 1. Façade模式 2. 接口
3. 组合
4. 耦合度
解答:
1. 模式定义了一个高层接口,这一接口使得这一子系统更加容易使用,为子系统中的一组 接口提供一个一致的界面。
2. 包含了一系列不被实现的方法,而把这些方法的实现交给继承它的类。 3. 4.
五.简答题
1. Façade(外观)模式解决问题的方案是什么? 如何实现?
2. 请简要说明在一个复杂系统中应用Façade(外观)模式的优点。
3. Façade模式的意图是什么?
4. 在Facade模式中,客户是如何使用子系统的?
解答:
1. 外观模式解决问题的方案是:Façade向客户展现使用现有系统的一个新的接口。如何实 现:定义一个(或一组)新的类来停工所需的接口。让新的类使用现有的系统。
2. 当拥有一个复杂的系统时,Façade(外观)模式使我们只需要使用它的一部分功能。最 终我们将得到一个更简单,更容易使用的或根据我们的需要定制的系统。
3. 意图是希望那个简化现有系统的使用方法,需要定义自己的接口。 4.
六.应用题
1. 请论述在一个系统中应用Façade(外观)模式的必要性,并给出一种解决方案。
2. 请举例说明Facade模式和Adapter模式使用场景的差异,并说明它们的解决方案及表现的 特点
解答:
1. Façade(外观)模式不仅可以为方法调用创建更简单的接口,还可以减少客户必须处理 的对象数量。举个例子。假设有一个Client对象,这个对象必须处理Database、Model、Elem ent类的对象。Client必须首先通过Database对象打开数据库,以得到一个对Model对象的引
用,然后再向Model对象请求一个Element对象,最后向Element对象查询所需的信息。而如果
能创建一个DatabaseFacade类,让Client对象向它发出请求,那么上面的过程可能就会变得 简单一些。 2.
第7章 Adapter(适配器)模式
一.选择
1. Adapter(适配器)模式的意图是( )。 A. 希望简化现有系统的使用方法。你需要定义自己的借口。 B.将一个无法控制的现有对象与一个特定借口相匹配。 C. 将一组实现部分从另一组使用它们的对象中分离出来。 D.你需要为特定的客户(或情况)提供特定系列的对象。
2. 下面不属于创建型模式的有()。 A.抽象工厂模式( Abstract Factory ) B.工厂方法模式(Factory Method) C.适配器模式 (Adapter) D.单例模式(Singleton)
3. 将一个类的接口转换成客户希望的另一个接口。这句话是对下列哪种模式的描述()。 A. 策略模式(Strategies) B.桥接模式(Bridge) C.适配器模式(Adapter) D.单例模式(Singleton)
4. 以下关于结构型模式说法不正确的是 。( ) A)结构型模式可以在不破坏类封装性的基础上,实现新的功能。 B)结构型模式主要用于创建一组对象。 C)结构型模式可以创建一组类的统一访问接口。 D)结构型模式可以在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交 互。
解答: 1. B 2. C 3. C 4. B
二.填空
1. 适配器模式,分为类的适配器和对象的适配器两种实现。其中类的适配器采用的是继承 关系,而对象适配器采用的是( )关系。
2. Adapter模式有两种类型有 :对象Adapter模式、()。
3. UML是一种用来创建()的图像语言。
4. ( )模式使原本接口不兼容而不能一起工作的类可以一起工作。
5. 适配器模式,分为类的适配器和对象的适配器两种实现。其中类的适配器采用的是( )关系,而对象适配器采用的是组合聚类关系。
解答:
1. 组合聚合
2. 类Adapter模式
3. 程序模型
4. Adapter适配器
5. 继承
三.判断
1. 对象适配器模式是合成聚合复用原则的典型应用。
2. Adapter模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。
3. Façade模式和Adapter模式是相同类型的包装器。
4. Adapter模式不是必须针对某个接口进行设计。
解答:
1. 对
2. 对 3. 错
4. 错
四.名词解释 1. Adapter模式
2. 对象Adapter模式
3. 类Adapter模式
4. 多态
解答:
1. 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而 不能一起工作的那些类可以一起工作。
2. 使用Adapter模式与适当的抽象类相匹配,它通常依赖于一个对象(适配对象)包含另一 个对象(被适配对象)。
3. 当实现Adapter模式的方法是使用多重继承。在这种情况下,它被成为类Adapter模式。
4. 相关的对象按照各自类型来实现方法的能力。
五.简答题
1. 给出Adapter模式的定义及意图。
2. Adapter模式的最常见的用法是什么?该模式可以使你不用操心什么方面?
3. Adapter模式问题的解决方案以及如何实现?
4. 请简要说明在软件设计中设计模式的作用?
解答:
1. 意图是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不 兼容而不能一起工作的那些类可以一起工作。
2. Adapter模式最通常的用途就是保持多态。Adapter模式让我们在进行设计时不必再担心 现存类的接口问题.
3. 解决方案是Adapter模式用我们需要的接口对无法修改的类进行包装。实现:将现存的类 包含在另一个类之中。包容类与需要的接口相匹配,并调用被包容类的方法。
4. 软件设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的 代码设计经验的总结。使用设计模式是为了适应需求变化、可重用代码、让代码更容易被他 人理解、保证代码的可靠性。
六.应用题
1. 根据你的理解,请分析Façade模式比Adapter模式的相同点和不同点,并说明它们在实 际应用中的差异?
2. 请说明什么是Adapter模式,Adapter模式有哪几种形式?请举例说明?
解答:
1. 在两个模式中,都拥有现存的类,但是在Façade模式中,无须针对某个接口进行设计; 而在Adapter模式中则必须针对某个特定接口进行设计。在Façade模式中,动机是简化接口
,而在Adapter模式中,尽管也是越简单越好,目的是针对一个现有的接口进行设计,并不能
简化任何东西,即使可能有另一个更简单的接口。总之,在实际应用中,Façade模式简化接
口,而Adapter模式将接口转换成另一个现有的接口。 2.
第8章 扩展我们的视野
一.选择 解答: 二.填空 解答: 三.判断 解答:
四.名词解释 解答: 五.简答题 解答: 六.应用题 解答:
第9章 Bridge(桥接)模式
一.选择
1. 关于继承表述错误的是:( )。 A.继承是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法。 B.泛化类(超类)可以显式地捕获那些公共的属性和方法。特殊类(子类)则通过附加
属性和方法来进行实现的扩展。 C.在一定意义上说破坏了封装性,因为这会将父类的实现细节暴露给子类。 D.继承本质上是“白盒复用”,对父类的修改,不会影响到子类。
2. 在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。主要体现在( )。 A外观模式(Facade) B装饰模式(Decorator) C策略模式(Strategies) D桥接模式(Bridge)
3. 行为类模式使用( )在类间分派行为。 A接口 B继承机制 C对象组合 D委托
4. 下面的类图表示的是哪个设计模式?( )。
A抽象工厂模式(Abstract Factory) B观察者模式(Observer) C策略模式(Strategies) D桥接模式(Bridge)
5. Bridge(桥接)模式的意图是( )。 A. 希望简化现有系统的使用方法。你需要定义自己的借口。 B.将一个无法控制的现有对象与一个特定借口相匹配。 C. 将一组实现部分从另一组使用它们的对象中分离出来。 D.你需要为特定的客户(或情况)提供特定系列的对象。
6. 按照四人团的说法,Bridge模式的意图是( )。 A. 将抽象部分与它的实现部分分离,使它们可以地变化. B. 将抽象部分与它的实现部分相分离,但它们不能地变化. C. 将抽象部分与它的实现部分相结合,但它们可以地变化. D. 将抽象部分与它的实现部分相结合,使它们相互依赖.
7. 以下叙述不对的是( )。 A. ,Bridge模式是将抽象部分与它的实现部分分离,使它们可以地变化. B. Bridge模式是发现并封装不同点的极好例子. C. Bridge模式优先使用继承而不是组合. D. Bridge模式优先使用组合而不是继承.
8. 以下叙述不对的是( )。 A. 学习设计模式告诉我们要尽可能使用继承. B. 学习设计模式通常可以找到比仅采用面向对象方法更好的解决方案. C. 学习设计模式告诉我们要尽可能使用组合. D. Bridge模式适用于一个抽象部分拥有不同的实现部分的情形
9. 对Alexander的模式哲学,以下叙述正确的是( )。 A 学习设计模式,可以完全解决软件开发中的变化情况. B. 每个模式,可以无数次使用模式提供的解决方案,而不必再次重复同样的工作方式. C. 设计模式总是可以为需求的变化提供更好的解决方案. D. 设计模式描述一个在开发的软件环境中不断产生新的问题时,能提供很好的解决方 案
10. 根据Coplien关于共同点/变化点的说法,下面哪个是正确的( )。 A. 共同点分析就是寻找一个不会随时间变化的结构,而变化点分析就是捕捉变化的内容 .
B. 共同点分析是寻找家族成员的相同元素. C. 在一个系统中,共同点和不同点的关系是相对的,可以互相转化. D. 共同点通常由父类实现,而变化点通常由子类实现.
解答: 1. D 2. D 3. B 4. D 5. C
6. A 7. C 8. A 9. B
10. B
二.填空
1. 在存在继承关系的情况下,方法向超类方向集中,而数据向( )方向集中。
2. 当存在一个抽象有不同实现时Bridge模式最为有用,它可以使抽象和( )相互地进 行变化。
3. ( )是通过多态使用具有派生类的抽象类实现的。
4. 在进行设计以应对变化的过程中,应该遵循两条基本策略:找出变化并( );优先使 用对象组合,而不是类继承。
5. C++中,必须用一个定义( )的抽象类来实现Bridge模式的实现部分。
6. 为了提高内聚和( ),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。
7. 封装性好的代码更容易测试,因为它与其他代码没有( )。
8. Bridge(桥接)模式是将抽象部分与它的实现部分分离,其中( )是指用来实现抽象 类的派生类的对象。
9. 在进行设计以应对变化的过程中,应该遵循两条基本策略:找出变化并封装变化点;优 先使用对象( ),而不是类继承。
10. 在进行设计以应对变化的过程中,应该遵循两条基本策略:找出变化并封装变化点;优 先使用对象组合 ,而不是类( )。
解答: 1. 子类
2. 实现
3. 类型的封装
4. 封装变化点
5. 公共接口
6. 松耦合
7. 耦合
8. 实现部分 9. 组合 10. 继承
三.判断
1. 为了提高内聚和紧耦合,我们经常会抽象出一些类的公共接口以形成抽象基类或者接口 。
2. 继承本质上是“白盒复用”,对父类的修改,不会影响到子类。
3. 继承是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法。
4. 即使在不知道如何实现Bridge(桥接)模式时,你也可以判断出在这种情况下这个模式 是适用的。
5. 在创建设计以处理变化的过程中,应该优先使用类继承,而不是使用对象组合。
6. 只有在共同点分析定义的上下文中,变化点才有意义。
7. 变化点就是领域问题的特殊情形,而共同点则是指一般情形。
8. Bridge模式就是为系统提供一种高内聚,松耦合的解决方案。
9. 当需要增加系统的功能时,应当采用Bridge模式。
10. 封装就是指数据隐藏。
解答: 1. 错
2. 错
3. 对
4. 对
5. 错 6. 对
7. 错 8. 对 9. 错 10. 错
四.名词解释 1. 抽象
2. 重构
3. 内聚性
4. 耦合性
5. Bridge(桥梁)模式
解答:
1. 是指不同事物之间概念上的联系方式。
2. 修改代码改进结构但不增加新功能,就是所谓重构。
3. 指的是例程中操作之间联系的紧密程度。
4. 指的是两个例程之间联系的紧密程度。
5. 将抽象化与实现化脱耦,使得二者可以的变化就是说将他们之间的强关联变成弱关 联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从
而使两者可以的变化。
五.简答题
1. Bridge模式要解决的基本问题是什么?
2. 给出Bridge模式的定义。采用Bridge模式的效果是什么?
3. 什么是“一条规则,一个地方”?
4. 在学习Bridge(桥接)模式的过程中,应该遵循下列处理变化的基本策略是什么?
5. Bridge(桥接)模式的解决方案是什么,以及如何实现?
解答:
1. Bridge(桥接)模式适用于一个抽象部分拥有不同的实现部分的情况,它让抽象部分和 实现部分可以各自的变化
2. 将抽象化与实现化脱耦,使得二者可以的变化,也就是说将他们之间的强关联变成 弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系
,从而使两者可以的变化。 效果是:“实现部分与使用它的对象的分离”增加了灵活性。客户对象不需要了解实现 问题。
3. 抽象类经常让自己的方法实际使用实现部分对象。抽象部分的派生类将调用这些方法。 这样如果需要修改,修改也会容易些,并且在实现整个模式之前让你拥有一个好的起点。
4. 找出变化并封装变化点;优先使用对象组合,而不是类继承。
5. 解决的问题是:为所以的实现部分定义一个接口,让抽象类的所有派生类使用这个接口 。实现:将实现部分封装在一个抽象类中。在被实现的抽象部分基类中包含一个实现部分基 类的句柄。
六.应用题
1. 根据你对Bridge 模式的理解,概要描述使用该模式的应用要求,并给出相应的设计类图 。
2. 举例说明使用Bridge 模式的场合,给出在该场合下使用Bridge 模式的解决方案,并说 明该解决方案的优点。
解答:
1. 当存在一个抽象有不同实现时Bridge模式最为有用,它可以使抽象和实现相互地进 行变化。
2. 打印驱动程序是Bridge模式最典型的例子,也是最适合应用Bridge模式的场合。Bridge 模式的真正威力在于它能够帮助我们看到什么时候应该从问题域中提取实现。也就是说,有 时候有一个实体X使用系统S,一个实体Y使用系统T。我们可能认为X总是与S相伴,而Y总是与
T相伴,因此就将它们联系(耦合)起来。Bridge模式提醒我们,可以抽象出S和T,这样更
好,也就是说,Bridge模式最有用的地方,是在解耦抽象与实现之前考虑Bridge模式是否适
用。
第10章 Abstract Factory(抽象工厂)模式
一.选择
1. 静态工厂的核心角色是()。 A.抽象产品 B.具体产品 C.静态工厂 D.消费者
2. 以下属于创建型模式的是()。 A抽象工厂模式(Abstract Factory) B 装饰模式(Decorator) C外观模式(Facade) D桥接模式(Bridge)
3. 下面的类图表示的是哪个设计模式?()。
A抽象工厂模式 B观察者模式 C 策略模式 D桥接模式
4. Abstract Factory(抽象工厂)模式的意图是()。 A. 希望简化现有系统的使用方法。你需要定义自己的借口。 B.将一个无法控制的现有对象与一个特定借口相匹配。 C. 将一组实现部分从另一组使用它们的对象中分离出来。 D.提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
5. 在根据不同的机器选择设备驱动程序的案例中,以下叙述不准确的是()。 A. 可以使用switch语句选择驱动程序. B. 可以使用继承来实现选择驱动程序,但它可能会产生类组合爆炸问题.. C. 可以选择抽象工厂模式实现,且能避免组合爆炸问题. D. 使用继承的解决方案要比switch语句有更多的优势.
6. 以下有关Abstract Factory(抽象工厂)模式正确的是( )。 A Abstract Factory的实例化方法就是具体工厂方法. B. Abstract Factory类和具体工厂方法可以分离,每个具体工厂负责一个抽象工厂方法 接口的实现. C. 由于Abstract Factory类和具体工厂方法可以分离,因此在实现时会产生更多的类. D. 当问题存在相同的对象用于解决不同的情形时,应该使用抽象工厂模式.
7. 根据《设计模式》,有关抽象工厂模式的定义,准确的说法是( )。 A 工厂方法是一个抽象类的派生类实现的。 B 要创造的东西本身是抽象定义的,工厂方法可以灵活实现。 C.抽象工厂只关注概念,而具体工厂创建抽象工厂。 D 抽象工厂派生出具体工厂对象和实现方法。
8. 关于抽象工厂模式,以下叙述不正确的是( ) A 客户对象不需要知道向谁请求所需的对象和如何使用这些对象。 B 抽象工厂类通过为每个不同类型的对象定义一个方法,来指定实例化哪个对象。 C 具体工厂对象负责指定哪些对象要实例化。 D 将抽象工厂模式和适配器模式结合在一起,可以将概念相似的对象当作同种对象处理 。
9. 关于抽象工厂模式( Abstract Factory ), 以下叙述正确的是( )。 A 抽象工厂相对具体工厂而言,可以理解为抽象工厂是抽象类,而具体工厂是对抽象工
厂的继承,是抽象工厂的子类。 B 抽象工厂类不能实例化,具体工厂可以实例化。 C 抽象工厂定义接口,具体工厂实现某一接口。 D 抽象工厂模式将使用哪些对象的规则与如何使用这些对象的逻辑有效地结合起来。
10. 下面属于创建型模式的有( )。 A.抽象工厂( Abstract Factory )模式 B.外观(Facade)模式
C.适配器(Adapter)模式 D.桥接(Bridge)模式
解答: 1. A 2. A 3. A 4. D 5. D 6. B 7. B 8. A 9. C
10. A
二.填空
1. ( )模式提供了一系列相关或相互依赖对象的接口而无需指定他们具体的类。
2. 工厂模式分为简单工厂,工厂方法,( )三种类型。
3. Abstract Factory模式就是用来解决这类问题的:要创建一组相关或者()的对象。
4. Abstract Factory模式强调的是为创建多个相互依赖的对象提供一个()。
5. 我们可以使用()模式,不同应用程序都使用同一子系统。
6. Abstract Factory意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定它 们()。
7. 当一个系统要( )于它的产品的创建、组合和表示时适合用Abstract Factory模式。
8. Abstract Factory模式为如何创建对象组的每个成员定义( )。
9. 抽象工厂模式是定义一个( ),然后为每个组实现一个具体类。
10. Abstract Factory模式将如何执行对象( )规则从使用这些对象的客户对象提取出来 。
解答:
1. 抽象工厂
2. 工厂方法
3. 相互依赖
4. 同一的接口
5. 抽象工厂
6. 具体的类 7.
8. 接口
9. 抽象类
10. 实例化
三.判断
1. 抽象工厂模式提供了一系列相关或相互依赖对象的接口且必须指定他们具体的类。
2. Abstract Factory(抽象工厂)模式确保系统总能根据当前的情况获得合适的对象。
3. 在Abstract Factory(抽象工厂)模式中,客户对象不需要知道“向谁请求需要的对象 ” “如何使用这些对象”。
4. 典型情况下,一个Abstract Factory对象将针对每种必须实例化的对象拥有一个方法。
5. 决定需要哪个工厂对象,实际上是判断需要那个系列的对象。
6. 从本质上看,switch语句可以达到和抽象工厂相同的效果。
7. 抽象工厂模式简化了设计过程。
8. 一个抽象工厂对象总是要和一个具体工厂方法对象相结合。
9. 抽象工厂模式告诉我们,要针对接口而不是实现进行设计。
10. 使用抽象工厂方法与优先使用组合是相矛盾的。 解答: 1. 错 2. 对 3. 错 4. 对
5. 对 6. 错 7. 错 8. 错
9. 对
10. 错
四.名词解释
1. Abstract Factory(抽象工厂)模式
2. 组合爆炸
3. 封装
4. 抽象类
5. 具体类
解答:
1. 就是用来解决这类问题的:要创建一组相关或者相互依赖的对象。
2. 随着问题中元素的增加,所出现的可能组合数剧烈增加,形象的说法就是组合爆炸。
3. 任何形式的隐藏。对象对它们的数据进行封装。抽象类对它们派生出的具体类进行封装 。
4. 为一组概念上相似的类定义方法和公共属性。抽象类绝对不能被实例化。
5. 是能被直接实例化的类、用例、信号、其他类元或其他泛化元素,它也可以用来描述实 现的操作。
五.简答题
1. Abstract Factory的三个关键策略是什么?
2. 采用Abstract Factory模式的效果是什么?
3. 为什么这个模式被称为“Abstract Factory”?
4. 如何获得正确的工厂对象?
5. 在Abstract Factory(抽象工厂)模式中对象的角色是什么?
解答:
1. 发现并封装变化点;优先使用对象组合,而不是类继承;针对接口设计,而不是针对实 现设计。
2. 效果:这个模式将“使用哪些对象”的规则与“”如何使用这些对象“的逻辑相隔离。
3. 这个模式之所以称为Abstract Factory,是因为它要创建的东西本身是由抽象定义的。 工厂各种变化的实现如何选择,模式并没有具体规定。
4. 决定需要哪个工厂对象实际上是判断需要哪个系列的对象。如何知道自己需要哪个系列 呢?在类似的案例中,最可能的是由一个配置文件来告诉我们。然后就可以写几行代码,根 据这些配置信息来将合适的工厂对象实例化。
5. 客户对象只知道“向谁请求需要的对象”和“如何使用这些对象”。Abstract Factory
类通过“为每种不同类型的对象定义一个方法来指定”哪些对象可以被实例化。典型情况下 ,一个Abstract Factor对象将针对每种必须实例化的对象拥有一个方法。具体工厂指定哪些 对象将被实例化。
六.应用题
1. 请结合抽象工厂模式,说明在实际应用中如何生成正确的对象。
2. 在抽象工厂模式中?有哪两种工厂?它们的作用什么?使用抽象工厂模式有什么优点?
解答:
1. 决定需要哪个工厂对象实际上与确定使用哪一组对象是相同的。例如,在驱动程序问题 中,有一组低分辨率驱动程序和一组高分辨率驱动程序,怎样才能知道自己需要哪一组呢? 在类似这样的例子中,很可能通过一个配置文件获知这一信息。然后可以编写几行代码,根 据配置信息将合适的工厂对象实例化。还可以使用Abstract Factory模式,不同应用程序都 使用同一子系统。在这种情况下,工厂对象将传给子系统,告诉子系统将要使用哪些对象, 此时,通常主系统知道子系统需要那一组对象,在调用子系统之前,将实例化正确的工厂对象。 2.
第11章 专家如何进行设计
一.选择 解答: 二.填空 解答: 三.判断 解答:
四.名词解释 解答: 五.简答题 解答: 六.应用题 解答:
第12章 用模式解决CAD/CAM问题
一.选择
1. 应用设计模式的一个优点是( )。 A.适应需求变化 B.程序易于理解 C.减少开发过程中的代码开发工作量 D.简化软件系统的设计
2. 当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用( )模式。 A.创建型 B.结构型 C行为型 D.以上都可以
3. 实现部分各不相同,但都可以通过一个通用接口被访问是( )模式中的包容变化。 A.Bridge B.Abstract Factory C.Adapter D.Facade
4. 以下哪一条是Alexander的场景原则:()。 A 在对象实例化之前,要考虑它的实例化。 B 当你有一个涉及创建对象的设计模式时,对象应为模式提供场景。 C 模式的选取与场景无关。 D 在一个系统中,由于模式之间的作用是相互的,不存在最高级别的模式。
5. 最高级别的模式约束其他的模式的不正确的叙述是()。
A 最高级别的模式决定其它模式的作用。
B 最高级别的模式是最重要的,其他的模式是次要的。 C 最高级别的模式为其它模式提供场景。 D 最高级别的模式也可称为场景确定模式。
解答: 1. A 2. A 3. A 4. B 5. B
二.填空
1. 设计模式的思想根源是( )基本原则的宏观运用,本质上是没有任何模式的,发现模 式的人永远是大师,而死守模式的人,最多只能是一个工匠。
2. 模式不仅仅是包容变化,它们还是变化之间的( )。
3. 系统中为其他模式确定场景的一个或两个模式,这个模式将对其他模式能做的事进行( )。
4. 通常情况下,当一个模式使用另一个模式时,看起来被使用模式是在使用模式的( ) 之中的。
5. 系统中的一个模式经常通过为系统中的其他模式提供( )与其他模式相关联。 解答: 1. 开闭
2. 关联
3. 约束
4. 场景
5. 场景
三.判断
1. 识别可能性不等于必须跟着可能性走。
2. 认为一个实际不会出现的模式出现会起反作用。
3. 对象适配器模式是依赖倒转原则的典型应用。
4. 通过在问题领域中使用模式,可以用一种不同的方式来看待问题。
5. 当有一个涉及创建对象的设计模式时,这些对象为这个模式提供场景。 解答: 1. 对
2. 错 3. 错
4. 对
5. 对
四.名词解释 1. 场景
2. CVA
3. 场景原则
4. 公开接口
5. 多态
解答:
1. 一些事物存在或发生的相互关联的状态。
2. 共同点/变化点分析
3. 当有一个涉及创建对象的设计模式时,这些对象为这个模式提供场景。 4. 5.
五.简答题
1. 考虑场景时使用的一条原则是什么?
2. 用模式的方法思考的步骤是什么?
3. 场景和被使用模式之间有什么关联?
4. 什么是“最高模式”?
5. 为一个庞大的工程的CAD/CAM系统提供支持的基本需求是什么?
解答:
1. 原则是:考虑在系统中需要什么,然后再关心如何实现它。这也符合Alexander的场景原 则:当有一个涉及创建对象的设计模式时,这些对象为这个模式提供场景。
2. 发现在问题领域中拥有的模式,这些是需要分析的模式;对于这些需要分析的模式,做 下列工作:a.挑出为其他模式提供最多场景的模式。b. 在我的概念性最高的设计中使用这个 模式。c.识别任何可能已经出现的附加模式。将它们添加到“需要分析的模式中”。d.对于 需要分析而还未分析的模式,重复上述过程; 按照需要将细节添加到设计中。扩展方法和类 定义。
3. 通常情况下,当一个模式使用另一个模式时,看起来被使用模式是在使用模式的场景之 中的。这条规则也可能有例外,但是看起在大多数时候它都是有效的。
4. 所谓“最高模式”是指系统中为其他模式建立背景的一两个模式。这个模式将约束其他 模式的行为。
5. 创建一个计算机程序,它能读取一个CAD/CAM数据集并从中提取部件,一个现有的专家系
统需要这些部件才能进行智能设计。这个系统应该向CAD/CAM系统屏蔽专家系统。复杂的是CA
D/CAM系统正处于变化之中。可能有CAD/CAM系统的多个潜在版本存在,而专家系统需要拥有
它们的接口。
六.应用题
1. 在CAD/CAM问题中,Abstract Factory模式被排除在“最高”模式之外,请举例说明为什 么?
解答:
1. 使用Abstract Factory模式的根本理由在于:如果有一个V1系统或者V2系统,需要确保 所有的实现对象都是V1类型或者V2类型的,但是Model对象本身已经知道这一点。如果其他对
象可以很容易地封装创建规则,就没有必要再实现一个模式。之所以将Abstract Factory模 式保留在模式集合中,是因为第一次解决这个问题时,存在Abstract Factory模式。这也说 明了,认为存在一个其实并不存在的模式,未必会有什么副作用。
第13章 设计模式的原则和策略
一.选择
1. Open-Close原则的含义是一个软件实体( )。 A.应当对扩展开放,对修改关闭. B.应当对修改开放,对扩展关闭 C.应当对继承开放,对修改关闭 D.以上都不对
2. 典型情况下,( )模式不包容变化。 A.Bridge B.Abstract Factory C.Adapter D.Facade
3. 下列属于设计模式基本原则的是( )。
A.继承 B.封装 C.开放-封闭 D都不是
4. 常用的设计模式可分为()。 A创建型、结构型和行为型 B对象型、结构型和行为型 C过程型、创建型和结构型 D抽象型、接口型和实现型
5. 以下哪一条不属于设计模式的基本原则()。 A 开放-封闭原则。 B 根据场景进行设计的原则。 C 优先使用继承的原则。 D 包容变化的原则。
解答: 1. A 2. D 3. C 4. A 5. C
二.填空
1. 设计模式基本原则包括:开闭原则,( ),包容变化原则。
2. 最基本的UML图是( )。它不仅描述了类,而且说明了类之间的关系。
3. 模块,方法和类应该对扩展是开放的,而对更改是( )的。
4. Alexander告诉我们要从( )进行设计,在设计我们的片段出现的细节之前先创建整体 视图 。
5. Bridge模式不仅仅对抽象部分和实现部分的变化进行定义和包容,而且还定义了两个变 化之间的( )。
解答:
1. 从场景进行设计原则
2. 类图 3. 封闭 4. 场景 5. 关联
三.判断
1. 抽象不应该依赖于细节,细节应当依赖于抽象。
2. 大多数设计模式还让软件更具有可修改性。
3. Open-Close原则的含义是一个软件实体应当对扩展开放,对修改关闭。
4. 常用的设计模式可分为过程型、创建型和结构型。
5. Adapter模式和Façade模式总是在别的什么东西创造的场景中被定义。 解答: 1. 错
2. 对 3. 对
4. 错
5. 错
四.名词解释
1. 开放-封闭原则
2. 超类
3. 属性
4. 成员
5. 方法
解答:
1. 模块,方法和类应该对扩展是开放的,而对更改是封闭的。
2. 一个类,其他的类派生自它,包含主要属性的定义,以及所有派生类都将使用(并且可 能重载)的方法的定义。
3. 与一个对象相关联的数据
4. 类的数据和方法
5. 与对象相关联的函数
五.简答题
1. 什么是开-闭原则?
2. 哪些因素决定了用哪种方案来实现Abstract Factory模式?
3. 按照模式进行设计的策略是什么?
4. 请举例说明如何根据模式为其他的模式创造场景来选择模式。
5. 为什么说Bridge是包容变化原则的一个精彩的范例?
解答:
1. 这条原则的意思是:模块,方法和类应该对扩展是开放的,而对更改是封闭的。换句话 说,我们必须将我们的软件设计成这样:我们可以在不修改代码的前提下对我们的软件进行 扩展。
2. 未来变化的可能性;“不修改当前系统”的重要性;谁来控制将被创建的对象系列(是 我们还是其他的开发组);使用的编程语言;数据库或配置文件的可用性。
3. 1.开放-封闭的原则 2.从场景进行设计 3. 在类中包容变化。
4. 比如,Bridge-Facade关联,使用Facade模式来简化V1系统的接口,Bridge模式的实现部 分之一使用Facade模式所创建的新接口。因此,Bridge模式为Facade模式创造了场景。
5. Bridge模式中的实现部分各不相同,但都可以通过一个通用接口被访问。系统可以接纳 新的实现部分,只要它也使用这个通用接口来实现。
六.应用题
1. 在本书的应用案例中,为什么认为Bridge模式高于Adapter模式? 请举例说明。
2. 设计模式应遵循的原则有哪些?请举例分别对它们进行解释?
解答:
1. Bridge模式的应用情景是在概念的抽象有变化及其实现方式有多个。而Adapter模式的应 用情景是原有对象的接口和需要的接口有差别。而大多数情景下Bridge模式是作为Adapter模
式的背景。也就是Bridge是Adapter的“最高模式”,在用Bridge模式封装实现时,大多数的
实现并不可以派生自相同的基类,这时Adapter模式就可以派上用场了。 2.
第14章 Strategy(策略)模式
一.选择
1. 下面的类图表示的是哪个设计模式?( ) A装饰模式(Decorator) B策略模式(Strategy) C桥接模式(Bridge) D观察者模式(Observer)
2. 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。这句话是对哪种 模式的描述( )。 A观察者模式(Observer) B桥接模式(Bridge) C适配器模式(Adapter) D策略模式(Strategy)
3. 下面属于行为模式的是( )。 A抽象工厂模式( Abstract Factory )B适配器模式 (Adapter) C.策略模式(Strategy) D外观模式(Façade)
4. 策略模式针对一组算法,将每一个算法封装到具有( )接口的的类中,从而使得 它们可以相互替换。
A.不同 B.一样 C共同 D都不是
5. Strategy(策略)模式的意图是:( )。 A.定义一系列的算法,把它们一个个的封装起来,并且使它们可相互替换。 B.为一个对象动态连接附加的职责。 C.你希望只拥有一个对象,但不用全局对象来控制对象的实例化。 D.在对象之间定义一种一对多的依赖关系,这样当一个对象的状态改变时,所有依赖
于它的对象都将得到通知并自动更新。
6. 作者在书中称“分析瘫痪”为()。 A 因为问题的复杂性导致分析失败。B 因为问题的复杂性导致分析无法继续进行。 C 过度分析或过度设计。 D 错误分析引起的后果。
7. 作者在《设计模式》中考虑变化的设计方式应遵循的原则中,哪一条是错误的()。 A 针对接口进行编程,而不是针对实现编程。 B 优先使用对象组合,而不是继承。 C 对需求中可能变化的部分,应重新设计。 D 在不引起重新设计的前提下,对变化的概念进行封装。
8. 以下叙述不正确的是()。 A switch语句可能导致“分支蔓延”。 B C++中的函数指针和C#中的委托都可以用来将代码隐藏在精巧、紧凑、内聚的函数 中。 C 使用继承可以实现复用。 D 作者认为复用是程序开发中最重要的考虑因素。
9. 对继承层次太深可能导致的问题的叙述不正确的是()。 A 继承层次太深导致紧内聚。 B 继承层次太深导致弱内聚。 C继承层次太深导致紧耦合。 D 继承层次太深会产生冗余,并使测试困难。
10. Strategy模式应遵循的原则中不正确的是()。 A 对象都具有职责。 B 职责不同的具体实现是通过多态的使用完成的。 C 概念上相同的算法具有多个不同的实现,需要进行管理。 D 优先使用组合而不是继承。
解答: 1. B 2. D
3. C 4. C 5. A 6. C 7. C 8. D 9. A
10. D
二.填空
1. ( )模式是一种定义一系列算法的方法。
2. UML是一种用来创建( )的图像语言。
3. 最基本的UML图是类图 。它不仅( )了类,而且说明了类之间的关系。
4. Strategy模式还简化了单元测试,因为每个算法都有自己的类,可以通过自己的( ) 单独测试。
5. Strategy意图是定义一系列的算法,把它们一个个( )起来, 并且使它们可相互替换。
6. Strategy模式要求所( )的算法应处在使用它们的类之外。
7. 通过从一个抽象类( )执行算法的所有不同方式,主模块无需再操心实际使用的是哪 一个算法。
8. 在Strategy模式的使用中,将某个( )从使用它的类中移出来,这种过程与数据库中 的规范化过程非常相似。
9. 将( )封装在一个抽象类中。而且在某一时刻能够互换地使用其中之一的方法,这就 是Strategy模式的本质。
10. Strategy模式是一种定义( )算法的方法。
解答:
1. Strategy
2. 程序模型
3. 描述 4. 接口
5. 封装 6. 封装 7. 派生
8. 变化的行为 9. 算法
10. 一系列
三.判断
1. Strategy模式使得算法可于使用它的客户而变化。
2. 从Strategy模式的概念上来说,所有算法都做相同的工作,且拥有相同的实现。
3. Strategy(策略)模式是一种定义算法家族的方法。
4. Strategy(策略)模式让我们可以将这些规则封装在一个抽象类中,然后拥有一系列 的抽象派生类。
5. Strategy(策略)模式的本质是在一个抽象类中封装一个算法并交替使用这些算法。
6. 在设计模式设计中,作者提倡对变化进行封装在一个类中,再通过对它进行继承的原则 。
7. 当使用不同的规则处理算法,就可以采用Strategy模式。
8. Strategy模式可以用不同的方式调用所有的算法。
9. Strategy模式简化了单元测试,因为每个算法都有自己的类,可以通过接口进行单独测 试。
10. 在算法设计时,采用Strategy模式会增加大量的类。
解答: 1. 对
2. 错
3. 对 4. 错
5. 对 6. 错
7. 错 8. 错
9. 对
10. 对
四.名词解释
1. Strategy(策略)模式 2. 解耦
3. 聚集
4. 构造函数
解答:
1. 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。这个模式使算法 可于使用它的客户而变化。
2. 解耦在软件里就是要让两个对象之间保持松耦合的关系,这种关系应具有稳定、标准等 特性,其作用是了对象修改所影响的范围。
3. 聚集表示类之间的关系是整体与部分的关系。 4.
五.简答题
1. Strategy模式的意图是什么吗?它有哪些效果?
2. Strategy(策略)模式是建立在哪些原则的基础上?
3. Strategy(策略)模式对问题的解决方案是什么?以及如何实现?
4. 按照四人团的说法,Strategy策略模式的基本思想是什么?
解答:
1. 意图是让你可以使用不同的业务规则或算法-----取决于它们出场的场景。效果有:Stra tegy(策略)模式定义了一系列的算法;switch语句或条件语句得到了避免;你必须以相同 的方式调用所有的算法(它们必须拥有相同的接口)ConcreteStrategies与Context之间的交 互可能需要在Context中加入getState之类的方法。
2. 主要建立在:对象拥有责任;这些责任的不同的特定实现通过使用多态来表现;需要将 几个不同的实现按照-----概念上------相同的算法来管理;一个好的设计经验:将问题领域 中发生的行为彼此分离------也就是说,使它们解耦。这让改变对某一行为负责的类,而不 会对其他行为产生不好的影响。
3. 解决方案是:将算法的选择和算法的实现相分离。让客户可以基于场景做出选择。实现 :让使用算法的类包含一个抽象类,抽象类中有一个抽象方法指定如何调用算法。每个派生 类根据需要实现算法。
4. 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,使算法可于 使用它的客户而变化。
六.应用题
1. 举例说出策略模式(Strategy)的应用场景,并且画出该模式的类图。
2. 在一个国际电子零售系统中,需要考虑为不同的国家的消费者的定单计算税费问题,请 用模式的方法考虑如何解决该问题。
解答:
1. Strategy模式是一种定义一系列算法的方法。概念上来看,所有这些算法完成的都是相 同的工作,只是实现不同。比如,在一个国际电子商务系统中,不同的国家需要使用不同的 税额计算算法。通过Strategy模式,可以将这些规则封装在一个抽象类中,然后派生出一系 列的具体类。
2. 通过Strategy模式,可以将这些规则封装在一个抽象类中,然后派生出一系列的具体类 。通过从一个抽象派生类执行算法的所有不同方式,主模块就无需再操心实际使用的是哪一 个,这样能够允许发生新的变化。
第15章 Decorator(装饰)模式
一.选择
1. 若系统中的某子模块需要为其他模块( )提供访问不同数据库系统的功能,这些数据 库系统提供的访问接口有一定的差异,但访问过程却都是相同的,例如,先连接数据库,在 打开数据库,最后对数据库进行查询,设计模式可抽象出相同的数据库访问过程。 A.外观 B 装饰 C单间 D模板方法
2. Decorator模式的描述正确的是( )。 A.该模式的意图是动态地给一个对象添加一些额外的职责。就增加功能来说,该模式相 比生成子类不够灵活。 B.适用于在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。 C.该模式的意图是将对象组合成树形结构以表示“部分-整体”的层次结构。该模式使得
用户对单个对象和组合对象的使用具有一致性。 D该模式适用性是你想表示对象的部分-整体层次结构。
3. 下面属于结构模式的有( )。 A 策略模式(Strategies) B. 单例模式(Singleton) C. 抽象工厂模式(Abstract Factory) D.装饰模式(Decorator)
4. 下面的类图表示的是哪个设计模式?( )。
A装饰模式(Decorator) B适配器模式(Adapter) C策略模式(Strategies) D桥接模式(Bridge)
5. Decorator(装饰)模式的意图是:( )。 A.定义一系列的算法,把它们一个个的封装起来,并且使它们可相互替换。 B.为一个对象动态连接附加的职责。 C.你希望只拥有一个对象,但不用全局对象来控制对象的实例化。 D.在对象之间定义一种一对多的依赖关系,这样当一个对象的状态改变时,所有依
赖于它的对象都将得到通知并自动更新。
解答: 1. B 2. B 3. D 4. A 5. B
二.填空
1. Decorator模式将一个功能链的( )与使用功能的客户分离开来。
2. Decorator模式对象在被装饰功能之前或者之后或者前两者同时执行自己的( )。
3. 每个Decorator对象都对其后的对象( )自己的新功能。
4. 就增加功能来说,Decorator模式相比生成子类更为( )。
5. Decorator模式是为现有的功能( )添加附加功能的一种方法。
解答:
1. 动态构建
2. 附加功能
3. 封装
4. 灵活
5. 动态
三.判断
1. Decorator(装饰)模式的意图是为一个对象连接附加的职责。
2. 每个Decorator对象在被装饰的功能之前或之后执行自己的附加功能。
3. Decorator(装饰)模式适用性是表示对象的部分-整体层次结构。
4. Decorator(装饰)模式的意图是动态地给一个对象添加一些额外的职责。就增加功能来 说,该模式相比生成子类不够灵活。
5. Decorator(装饰)模式是为现有的功能动态添加附加功能的一种方法。
解答: 1. 错
2. 对 3. 错 4. 错 5. 对
四.名词解释
1. Decorator(装饰)模式
2. Decorator(装饰)链
3. 类图
4. 交互图
解答:
1. 动态地给一个对象添加一些额外的职责。
2. 始于一个Componet对象,每个装饰者对象后面紧跟着另一个装饰者对象,而对象链终于C
oncreteComponet对象。
3. 是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的 关系等。
4. 以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、理解、 刻划客观世界和设计、构建相应的软件系统
五.简答题
1. 每个Decorator对象封装的是什么?
2. Decorator(装饰)模式的效果是什么?
3. Decorator(装饰)模式的解决方案是什么?如何实现?
4. 画出Decorator(装饰)模式的类图。
解答:
1. 每个Decorator对象都对其后的对象封装自己的新功能。每个Decorator对象在被装饰的 功能之前或之后执行自己的附加功能。
2. 被添加的功能属于小的对象。好处是可以在ConcreteComponent对象的功能之前或之后动
态添加功能。虽然一个装饰者可以在被装饰者之前或之后添加功能,但对象链总是以Concret eComponent对象结束。
3. 解决方案是允许扩展一个对象的功能,而不必借助于子类型化。实现:创建一个抽象类 来表示原始的类和要添加到这个类上的新功能。在装饰者类中,将“对新功能的调用”放在 “对紧随其后对象的调用”之前或之后,以获得正确的顺序。
4. 图见课本P177页,图15-4.
六.应用题
1. 请结合实际应用说明Decorator模式是怎样对问题按功能进行分解?
2. Decorator链有什么作用?它是怎样形成的,请举一个例子说明?
解答:
1. Decorator模式并不通过一个控制方法控制新增功能,而是建议以需要的正确顺序将所需 功能串联起来,进行控制。Decorator模式将这样一个功能链的动态构建与使用功能的客户分
离开来。而且还将功能链的构建与链组件分离开来。这样就能灵活使用这些组件,比如,表 头,页脚和SalesTicket分离开来。 2.
第16章 Singleton(单件)和Double-Checked Locking(双重检查锁定)模式
一.选择
1. Singleton模式适用于( )。 A当类有多个实例而且客户可以从一个众所周知访问点访问它时。 B当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一
个扩展的实例时。 C当构造过程必须允许被构造的对象有不同的表示时。 D生成一批对象时。
2. 保证一个类仅有一个实例,并提供一个访问它的全局访问点。这句话是对下列哪种模式 的描述( )。 A. 外观模式(Facade) B 策略模式(Strategies)
C. 适配器模式(Adapter) D. 单例模式(Singleton)
3. 单例模式的作用是( )。 A.当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能。 B.为了系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易 使用。 C.保证一个类仅有一个实例,并提供一个访问他的全局访问点。 D. 单例模式仅仅应用于多线程应用程序中。
4. 下面不属于结构模式的有( )。 A.适配器模式(Adapter) B. 单例模式(Singleton) C. 桥接模式(Bridge) D.装饰模式(Decorator)
5. 单例模式(Singleton)(装饰)模式的意图是:( )。 A.定义一系列的算法,把它们一个个的封装起来,并且使它们可相互替换。 B.为一个对象动态连接附加的职责。 C.你希望只拥有一个对象,但不用全局对象来控制对象的实例化。 D.在对象之间定义一种一对多的依赖关系,这样当一个对象的状态改变时,所有依赖 于它的对象都将得到通知并自动更新。
解答: 1. B 2. D 3. C 4. B 5. C
二.填空
1. ( )模式确保某一个类仅有一个实例,并自行实例化向整个系统提供这个实例。
2. ( )模式只应在有真正的“单一实例”的需求时才可使用。
3. 单例模式属于( )模式。
4. Singleton(单件)模式和Double-Checked Locking模式都用以确保一个特定的类只有一 个对象被( )。
5. Singleton(单件)模式用于单线程应用程序,Double-Checked Locking模式用于( )
应用程序。
解答: 1. 单例
2. 单例
3. 创建型
4. 实例化
5. 多线程
三.判断
1. 单例模式确保某一个类具有多个实例,并自行实例化向整个系统提供这个实例。
2. Singleton模式适用于当类只能有一个实例,而且客户可以从一个公共的访问点访问它。
3. Double-Checked Locking模式既可以用于单线程又能应用于多线程应用程序。
4. Singleton(单件)模式的工作方式是拥有一个特定的方法,这个方法被用于实例化需要 的对象。
5. Singleton(单件)模式属于结构性模式。 解答: 1. 错
2. 对 3. 错
4. 对
5. 错
四.名词解释
1. Singleton(单件)模式
2. Double-Checked Locking 模式
3. 多线程
4. 封装
解答:
1. 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
2. 是singleton的多线程版本。
3. 在单个程序中同时运行多个线程完成不同的工作,称为多线程. 4.
五.简答题
1. Singleton(单件)模式怎样工作?
2. Singleton(单件)模式和Double-Checked Locking模式之间有什么区别?
3. 描述Singleton(单件)模式意图以及效果?
4. Singleton(单件)模式的用途是什么?
解答:
1. Singleton(单件)模式的工作方式是:拥有一个特定的方法,这个方法被用于实例化需 要的对象。当这个方法被调用时,它检查这个对象是否已经被实例化。如果对象已经被实例 化,这个方法仅仅返回这个对象的一个引用。如果对象尚未实例化,这个方法将对象实例化 并返回这个新的实例的引用。为了确保这是创建这个类型的对象的惟一途径,在这个类中将 构造函数定义为protected或private。
2. Singleton(单件)模式用于单线程应用程序,而Double-Checked Locking模式用于多线 程应用程序。
3. Singleton(单件)模式的意图是你希望只拥有一个对象,但不用全局对象来控制对象的 实例化。效果是客户对象不需要关心是否已经有Singleton的实例存在。这可以在Singleton 内部得到控制。
4. 它让我们可以仅仅对对象进行一次实例化,而不要求客户对象关心这个对象是否存在。
六.应用题
1. 在一个多线程应用程序中,如果使用Singleton模式,试分析可能会出现哪些问题。
2. 请说明Singleton模式的动机和解决方案,这种处理方案和对象处理自己的单一实例化是 否矛盾,请给出你的看法?
解答:
1. 出现A进程和B进程同时访问某个对象的时候,发现它没有实例化过,结果A、B进程分别
将该类实例化一次,出现冗余对象的情况。这个情况并不多见,但是C++中出现了就是内
存
泄露的重大问题。 2.
第17章 Observer(观察者)模式
一.选择
1. 在观察者模式中,表述错误的是( )。 A.观察者角色的更新是被动的。 B.被观察者可以通知观察者进行更新 C.观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态 进行。 D.以上表述全部错误。
2. 下面的类图表示的是哪个设计模式?( )。 A 策略模式(Strategies) B 装饰模式(Decorator) C 桥接模式(Bridge) D 观察者模式(Observer)
3. 当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用( )模式。 A.创建型 B.结构型 C行为型 D.以上都可以
4. 下列模式中,属于行为模式的是( )。 A.工厂模式 B观察者 C适配器 D 以上都是
5. Observer模式不适用于( )。 A当一个抽象模型存在两个方面,其中一个方面依赖于另一方面,将这二者封装在的
对象中以使它们可以各自的改变和复用。
B当对一个对象的改变需要同时改变其他对象,而不知道具体有多少个对象有待改变时。 C当一个对象必须通知其它对象,而它又不能假定其它对象是谁,也就是说你不希望这些
对象是紧耦合的。 D一个对象结构包含很多类对象,它们有不同的接口,而想对这些对象实施一些依赖于其
具体类的操作。
6. 下面的类图表示的是哪个设计模式?( )。 A观察者模式 B单例模式 C桥接模式 D策略模式
7. 观察者模式定义了一种( )的依赖关系。 A 一对多 B一对一 C多对多 D以上都有可能
8. 下列模式中,属于行为模式的是( )。 A.外观模式 B观察者模式 C单例模式 D 桥接模式
9. 对观察者模式,以下叙述不正确的是()。 A 必须找出所有希望获得通知的对象。 B 所有的观察者对象有相同的接口。 C 如果观察者的类型相同,目标就可以轻易地通知它们。 D 在大多数情况下,观察者负责了解自己观察的是什么,目标需要知道有哪些观察者
依赖自己。
10. 对于观察者模式,以下叙述正确的是()。 A 当对象之间存在依赖关系,就适宜采用观察者模式。
B 如果对象之间的以来关系是固定的,采用观察者模式会带来负面影响。 C 如果需要得到某事件通知的对象列表是变化的,不适宜采用观察者模式。 D 以上叙述皆不正确。
解答: 1. C 2. D 3. A 4. B 5. D 6. A 7. A 8. B 9. A
10. B
二.填空
1. ( )模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有 依赖于它的对象都得到通知并自动更新。
2. 观察者模式定义了一种( )的依赖关系,让多个观察者对象同时监听某一个主题对象 。
3. Observer(观察者)模式是一个( )模式。
4. 当依赖关系固定(或几乎固定)时,加入一个Observer模式可能只会增加( )。
5. 为了对所有Observer类型的对象实现Observer接口,有时候需要使用()模式。
6. 如果系统在不同的情况下运行,或由不同的用户运行,需要的观察者列表会不同,这时 适宜用()模式。
7. 一个观察者可能只需要处理事件的某些情况,在这种情况下,观察者必须将额外的( )筛选掉。
8. 对观察者模式,观察者通常将观察某个事件的责任交给( )。
9. Subject类将实现一个( )方法来遍历其Observer对象列表,并调用每个Observer对 象的update方法。
10. 当Subject对象有了已注册的Observer对象,事件发生时,Subject对象通知Observer对
象将非常简单。为此,每个Observer对象都要实现一个( )方法。
解答: 1. 观察者
2. 一对多 3. 行为
4. 复杂性
5. Adapter
6. Observer 7. 通知
8. 中心对象或Subject
9. notify
10. update
三.判断
1. 创建型模式关注的是组织类和对象的常用方法。
2. 常用的设计模式可分为过程型、创建型和结构型。
3. 当对象之间存在依赖关系时就应该使用Observer(观察者)模式。
4. 当依赖关系固定(或几乎固定)时,加入一个Observer(观察者)模式可能只会增加复 杂性。
5. 一个Observer(观察者)模式可能只需要处理事件的某种特定情况。
6. 对观察者模式,触发事件的对象——Subject对象不需要知道观察事件的所有对象。
7. 对观察者模式,Subject不知道与哪种观察者通信,Observer类封装了各种特定的Observ er。
8. Observer对象有多种,但都从Subject对象收集信息,并收集相应的操作结果。
9. Observer类包含了需要得到通知的对象的概念,并为目标对象提供一个通知Observer的 公共接口。
10. 对观察者模式,要求所有的Observer负责将自己注册到目标对象上。 解答: 1. 错 2. 错
3. 错 4. 对
5. 对
6. 对
7. 对 8. 错
9. 对
10. 对
四.名词解释
1. Observer(观察者)模式
2. 结构型模式
3. 行为型模式
4. 创建型模式
解答:
1. 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的 对象都得到通知并被自动更新。
2. 将现存的对象结合在一起,处理接口,将实现与抽象类联系起来。
3. 提供一种显得灵活(变化)的行为,包容变化的模式。例如,strategy 模式和observer 模式。
4. 创建或实例化对象
五.简答题
1. GOF设计模式按照模式的目的可分为哪三类?其目的分别是什么?
2. Observer模式的定义,它要解决什么样的问题?
3. Observer(观察者)模式的效果。
4. Observer(观察者)模式如何实现解决方案的?
解答:
1. 结构型:将现存的对象结合在一起。 行为型:提供一种显得灵活(变化)行为。 创建 型:穿件或实例化对象。
2. Observer(观察者)模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生 改变时,所有依赖于它的对象都得到通知并被自动更新。解决的问题是当某个事件发生时, 你需要向一系列对象发出通知,而这个对象的列表是不断变化的。
3. 效果是如果某些Observer只对全部事件的一个子集感兴趣,那么Subject可能会告诉Obse rver它们不需要知道的事件。如果在Subject通知Observer之后,Observer又转过来请求附 加信息,就可能需要额外的通信。
4. 让“希望知道某个事件何时发生”的对象(Observer)将自己注册到另一个“监视事件 发生或自己触发事件”的对象(Subject)上。 当事件发生时,Subject告诉Observer“你关 心的事情 已经发生了”。 为了能让所有的观察者型对象实现Observer接口,有时候需要使 用Adapter模式。
六.应用题
1. 给出Observer的定义以及它的意图,举一个例子说明该模式的适用场景,最后画出它的 类图。
2. 根据你的理解,请你谈谈结构型和行为型模式的区别,并结合实际的应用举例说明。
解答:
1. 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的 对象都得到通知并被自动更新。解决的问题是当某个事件发生时,你需要向一系列对象发出 通知,而这个对象的列表是不断变化的。例如,在Subject对象注册了它的一个Observer对象
,当事件发生时,Subject对象向Observer对象发出通知就非常简单了。为了实现这一功能, 每个Observer类都实现一个叫做updata的方法。Subject类这样实现notify方法:遍历自己的
Observer对象列表,调用其中每个Observer对象的updata方法。Updata方法应该包含处理事
件的代码。
2. 结构型模式的目的是将现存的对象结合在一起,用途是处理接口,将实现与抽象类联系 起来。而行为型模式的目的是提供一种显得灵活的行为,用途是包容变化的。例子:结构型 模式中的Bridge模式或Decorator模式与行为型模式中的Strategy模式的比较。
第18章 Template Method(模板方法)模式
一.选择
1. 以下属于行为对象模式的是( )。 A模板模式(Template Method) B装饰模式(Decorator) C桥接模式(Bridge) D工厂方法模式(Factory Method)
2. 模板方法的作用是( )。 A.当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能。 B.为了系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易 使用。 C.保证一个类仅有一个实例,并提供一个访问他的全局访问点。 D.在方法中定义算法的框架,而将算法中的一些操作步骤延迟到子类中实现。
3. Template Method(模版)模式的意图是:( )。 A.定义一系列的算法,把它们一个个的封装起来,并且使它们可相互替换。 B.为一个对象动态连接附加的职责。 C.你希望只拥有一个对象,但不用全局对象来控制对象的实例化。 D.定义一个操作中的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法 的结构即可重定义该算法的某些特定步骤。
4. 有关模板方法模式,以下叙述不正确的是()。 A 允许定义不同的子过程,同时维护基本过程的一致性。 B 将定义和操作相互分离。 C 创建一个抽象类,用抽象方法实现一个过程,这些抽象方法必须在子类中实现。 D 实现抽象方法的子类的步骤可以变化,并且这些步骤可以采用Strategy模式来实 现。
5. 在采用模板方法模式对系统连接不同数据库(例如Oracle 和SQL Server)的连接时,以 下叙述不正确的是()。 A 尽管Oracle 和SQL Server数据库有不同的连接、查询方法,但它们有相同的概念上 的过程。
B 使用模板方法模式,可以在抽象类中捕捉共同点而在派生类中封装不同点。 C 模板方法模式用于控制连接数据库操作的一个序列的行为步骤。 D 可以采用通用的实现方法建立对不同数据库的连接。
解答: 1. A 2. D 3. D 4. B 5. D
二.填空
1. Template Method模式准备一个抽象类,将部分逻辑以( )以及具体构造子类的形式 实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。
2. Template Method(模版)模式是用以帮助从不同的步骤中抽象出一个( )过程模式 。
3. Template Method(模版)模式让我们可以在抽象类中捕捉共同点而在( )中封装不 同点。
4. 当遇到一个心得数据库时,Template Method(模版)模式提供了一个( )让我们填 充。我们创建一个新的派生类,并根据新的数据库的要求实现特定的步骤。
5. Template Method(模版)模式使得子类可以不改变一个算法的结构即可( )该算法 的某些特定步骤。
解答:
1. 具体方法
2. 通过的
3. 派生类
4. 样板
5. 重定义
三.判断
1. Template Method(模版)模式只是在一起工作的Strategies模式的集合。
2. Template Method(模版)模式适用于有几个相同且概念上相似的步骤存在的情况。
3. Template Method(模版)模式被用于控制一个序列的行为步骤,这些步骤通常是相同的 。
4. Template Method是用以帮助从不同的步骤中抽象出一个通用的过程的模式。
5. Template Method(模版)模式使得子类可以改变一个算法的结构即可重定义该算法的某 些特定步骤。
解答: 1. 错 2. 错 3. 错
4. 对 5. 对
四.名词解释
1. Template Method(模版)模式 2. 重载
3. 虚拟方法
4. 类图
解答:
1. 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类 可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2. 一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。
3. 当实例方法声明包含virtual修饰符时,称该方法为虚拟方法。 4.
五.简答题
1. Template Method模式以怎样的一种特殊的方式进行方法调用?
2. Template Method(模版)模式如何定义,其效果是什么?
3. Template Method(模版)模式需要解决的问题是什么?解决方案是什么?
4. 按照四人团的说法,Template Method模式的基本思想是什么?
解答:
1. Template Method(模版)模式可以这样做,因为对方法的调用是通过一个引用来进行的 ,而这个引用指向的对象属于某一个派生类。
2. 定义一个操作中的骨架,而将一些步骤延迟到子类中。Template Method模式使得子类可 以不改变一个算法的结构即可重定义该算法的某些特定步骤。效果:模版为代码复用提供了 一个优秀的平台。它们还有助于确保需要的步骤得到实现。它们为每个具体类将重载后的步 骤捆绑在一起,因此只有在这些重载方法总是并且只能一起发生时,才应该使用Template Me thod(模版)模式。
3. 需要遵循一个过程或一系列步骤,它们在某个具体层次上保持一致,但单个步骤在更详 细的层次上可能有不同的实现。 解决方案:允许定义不同的子步骤,同时维护基本过程的一致性。
4. 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method模式使得 子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。Template Method模式给
了我们一条途径,让我们可以在抽象类中捕捉共同点而在派生类中封装不同点。
六.应用题
1. 在一个系统中,如果需要同时支持Oracle和SQL Server数据库,请用模板方法给出上述 解决方案。
2. Strategy模式和Template Method模式有哪些相同点和不同点,并分别举例说明?
解答: 1. 2.
第19章 Factory Method(工厂方法)模式
一.选择
1. 下列关于静态工厂与工厂方法表述错误的是:( ) A.两者都满足开闭原则:静态工厂以if else方式创建对象,增加需求的时候会修改源代 码。 B.静态工厂对具体产品的创建类别和创建时机的判断是混和在一起的,这点在工厂方法 是分开的。 C不能形成静态工厂的继承结构。 D.在工厂方法模式中,对于存在继承等级结构的产品树,产品的创建是通过相应等级结 构的工厂创建的。
2. 下面属于创建型模式的有( )。 A. 桥接模式(Bridge) B.工厂方法模式(Factory Method) C. 策略模式(Strategies) D.观察者模式(Decorator)
3. Factory Method(工厂方法)模式的意图是:( ) A.定义一个用于创建对象的接口,让子类决定实例化哪一个类。将实例化延迟到其子类 。 B.为一个对象动态连接附加的职责。 C.你希望只拥有一个对象,但不用全局对象来控制对象的实例化。 D.定义一个操作中的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法 的结构即可重定义该算法的某些特定步骤。
4. 以下哪种模式不属于创建型模式( )。 A. 单例模式(Bridge) B.工厂方法模式(Factory Method) C. 策略模式(Strategies) D.抽象工厂模式(Decorator)
5. 关于工厂方法,以下叙述不正确的是()。 A Factory Method是一个用于帮助分配创建的责任的模式。 B Factory Method模式和Abstract Factory模式总是配合使用。 C Factory Method适用于将对象实例化的规则推迟到某个派生类的情形。 D Factory Method是属于创建型模式。
解答: 1. A 2. A 3. A 4. C 5. B
二.填空
1. ( )模式中,父类负责定义创建对象的接口,子类则负责生成具体的对象。
2. 工厂模式分为简单工厂,( ),抽象工厂三种类型。
3. Factory Method(工厂方法)模式是一个用于帮助分配( )的模式。
4. Factory Method(工厂方法)模式在定义( )的过程中很常用,这是因为它存在于一 个抽象的层次上。
5. Factory Method(工厂方法)模式定义一个用于创建对象的接口,让子类决定( ) 哪一个类。
解答:
1. 工厂方法
2. 工厂方法
3. 创建责任 4. 框架
5. 实例化
三.判断
1. 工厂方法模式中,子类负责定义创建对象的接口,父类则负责生成具体的对象。
2. 在工厂方法模式中,对于存在继承等级结构的产品树,产品的创建是通过相应等级结构 的工厂创建的。
3. Factory Method(工厂方法)模式是一个用于定义责任接口的模式。
4. Factory Method(工厂方法)模式并不常用于定义框架的过程。
5. Factory Method(工厂方法)模式是一个很直观的模式,将会不断地重复使用。
解答: 1. 错
2. 对
3. 错
4. 错
5. 对
四.名词解释
1. Factory Method(工厂方法)模式
2. 构造函数
3. 规格
4. 交互图
解答:
1. 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类 的实例化延迟到其子类。
2. 对对象进行初始化或初始设置。
3. 生产的成品或所使用的原材料等规定的质量标准。 4.
五.简答题
1. Abstract Factory模式如何由一系列Factory Method(工厂方法)模式来实现?
2. Factory Method(工厂方法)模式意图是什么? 效果是什么?
3. Factory Method(工厂方法)模式的解决问题的方案是什么,如何实现?
4. 什么情况下适合使用Factory Method(工厂方法)模式?
解答:
1. 在Abstract Factory模式的典型实现中,用一个抽象类来定义创建一族对象的方法。为 每个可能拥有的对象族派生出一个具体类。这些方法全都在抽象类中定义,然后在派生类中 被重载,这些方法遵循了Factory Method(工厂方法)模式。
2. 意图是定义一个用于创建对象的接口,让子类决定实例化哪一个类。将实例化延迟到其 子类。效果:客户将需要Creator的子类来创建一个特定的ConcreteProduct对象。
3. 解决方案是:一个派生类对“实例化哪个类、如何实例化”的问题做出决定。实现:在 抽象类中使用一个抽象方法(C++中的纯虚函数)。抽象类的代码把这个方法延迟到需要实例 化一个被包含对象的时候,抽象类不知道需要哪个特定对象
4. 在下列情况下可以考虑使用工厂方法模式: a 当客户程序不需要知道要使用对象的创建过程。 b 客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。
六.应用题
1. 请说明抽象工厂和工厂方法模式在应用中的不同作用,并说明在什么情形下使用抽象工 厂模式,什么情形下使用工厂方法。
2. Factory Method的意图是什么?根据你知道的模式,它可能和哪些模式配合使用,试举例 说明?
解答:
1. 2.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务