《软件设计模式试题集_附答案.pdf》由会员分享,可在线阅读,更多相关《软件设计模式试题集_附答案.pdf(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 5 章 设计模式试题 一.选择 1.设计模式具有的优点()。A A适应需求变化适应需求变化 B.程序易于理解 C减少开发过程中的代码开发工作量 D.简化软件系统的设计 2.设计模式一般用来解决什么样的问题()。A.A.同一问题的不同表相同一问题的不同表相 B 不同问题的同一表相 C.不同问题的不同表相 D.以上都不是 3.设计模式的两大主题是()。A.系统的维护与开发 B.对象组合与类的继承 C.系统架构与系统开发 D.D.系统复用与系统扩展系统复用与系统扩展 4.以下哪些问题通过应用设计模式不能够解决。()A)指定对象的接口 B)针对接口编程 C C)确定软件的功能都正确实现)确定软件的
2、功能都正确实现 D)设计应支持变化 二.填空 1.模式的基本要素包括名称、意图、问题、解决方案、参与者和协作者、(效果效果)、实现、GoF 参考。2.设计模式基本原则包括:开闭原则,(从场景进行设计的原则从场景进行设计的原则),包容变化原则。3.设计模式是一个(抽象抽象)的方案,它可以解决一类问题。4.1.在设计模式群体中,效果是指(原因和结果原因和结果)。三.判断 1.适配器模式属于创建型模式。错错 2.在设计模式中,“效果”只是指“原因和结果”。对对 3.设计模式使代码编制不能真正工程化。错错 4.设计模式的两大主题是系统复用与系统扩展。对对 四.名词解释 1.设计模式 是一套被反复使用、
3、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。让代码更容易被他人理解、保证代码可靠性。2.模板 模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。3.模式 就是解决某一类问题的方法论。把解决某类问题就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。的方法总结归纳到理论高度,那就是模式。4.内聚度 模块内部各成分彼此结合的紧密程度。
4、模块内部各成分彼此结合的紧密程度。五.简答题 1.什么是设计模式?设计模式的目标是什么?设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。重用代码、让代码更容易被他人理解、保证代码可靠性。2.设计模式的基本要素有哪些?名称,意图,问题,解决方案,参与者和协作者,效果,实现,名称,意图,问题,解决方案,参与者和协作者,效果,实现,GOFGOF 参考。参考。3.设计模式中一般都遵循的原则有什么?开开-闭原则,
5、根据场景进行设计原则,优先组合原则,包容变化原则。闭原则,根据场景进行设计原则,优先组合原则,包容变化原则。4.四人团针对“创建优秀面向对象设计”建议了哪些策略?针对接口编程,优先使用对象组合而不是类继承,找到并封装变化点。针对接口编程,优先使用对象组合而不是类继承,找到并封装变化点。第第 6 6 章章 facade(facade(外观外观)模式模式 一.选择 1.外观模式的作用是()。A当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能。B B为了系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易使用。为了系统中的一组功能调用提供一个一致的接口,这个接
6、口使得这一子系统更加容易使用。C保证一个类仅有一个实例,并提供一个访问他的全局访问点。D在方法中定义算法的框架,而将算法中的一些操作步骤延迟到子类中实现。2.Faade(外观)模式的意图是()。A.A.希望简化现有系统的使用方法,你需要定义自己的接希望简化现有系统的使用方法,你需要定义自己的接口。口。B.将一个无法控制的现有对象与一个特定借口相匹配。C.将一组实现部分从另一组使用它们的对象中分离出来。D你需要为特定的客户(或情况)提供特定系列的对象。3.()模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。A.Adapter(适配器)模式 B.Bridge(桥接)模式 C.Strat
7、egy(策略)模式 D.Facade D.Facade(外观)模式(外观)模式 4.下面属于结构模式的有()。A 观察者模式(Observer)B.单例模式(Singleton)C.策略模式(Strategy)D D.外观模式(外观模式(FaadeFaade)二.填空 1.Facade 模式可以用来(隐藏隐藏)系统。该模式能够将系统作为自己的私有成员包含进来。2.Faade 模式要解决的问题:只需要使用一个复杂系统的一个(子集子集)。或者,需要用一种特殊的方式与系统交互。3.Faade 模式不仅可以为方法调用创建更(简单简单)的接口,还可以减少客户必须处理的对象数量。4.Faade 外观模式的
8、解决方案是向客户展现使用现有系统的一个新的(接口接口)。三.判断 1.Faade(外观)模式不仅可以为方法调用创建更简单的接口,还可以减少客户必须处理的对象数量。对对 2.外观模式,当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能。错错 3.Faade 模式为子系统中的一组接口提供的界面可能不一致。错错 4.Faade 外观模式只能为方法调用创建更简单的接口,不能减少客户必须处理的对象数量。错错 四.名词解释 1.Faade 模式 模式定义了一个高层接口,使得这一子系统更加模式定义了一个高层接口,使得这一子系统更加容易使用,为子系统中的一组接口提供一个一致的界面。容易使用
9、,为子系统中的一组接口提供一个一致的界面。2.接口 包含了一系列不被实现的方法,而把这些方法的实现交给继承它的类。包含了一系列不被实现的方法,而把这些方法的实现交给继承它的类。3.组合 一个类是另一个类的组成成分。一个类是另一个类的组成成分。4.耦合度 对模块间关联程度的度量。对模块间关联程度的度量。五.简答题 1.Faade(外观)模式解决问题的方案是什么?如何实现?FaadeFaade 向客户展现使用现有系统的一个新的接口。如何实现:定义一个(或一组)新的类来封装所需的接口。向客户展现使用现有系统的一个新的接口。如何实现:定义一个(或一组)新的类来封装所需的接口。让新的类使用现有的系统。让
10、新的类使用现有的系统。2.请简要说明在一个复杂系统中应用 Faade(外观)模式的优点。当拥有一个复杂的系统时,当拥有一个复杂的系统时,F Faadeaade(外观)模式使我们只需要使用它的一部分功能。最终我们将得到一个更简(外观)模式使我们只需要使用它的一部分功能。最终我们将得到一个更简单,更容易使用的或根据我们的需要定制的系统。单,更容易使用的或根据我们的需要定制的系统。3.Faade 模式的意图是什么?望那个简化现有系统的使用方法,需要定义自己的接口。望那个简化现有系统的使用方法,需要定义自己的接口。4.在 Facade 模式中,客户是如何使用子系统的?六.应用题 1.请论述在一个系统中
11、应用 Faade(外观)模式的必要性,并给出一种解决方案。FaadeFaade(外观)模式不仅可以为方法调用创建更简单的接口,还可以减少客户必须处理的对象数量。举个例子。(外观)模式不仅可以为方法调用创建更简单的接口,还可以减少客户必须处理的对象数量。举个例子。假设有一个假设有一个 ClientClient 对象,这个对象必须处理对象,这个对象必须处理 DatabaseDatabase、ModelModel、ElementElement 类的对象。类的对象。ClientClient 必须首先通过必须首先通过 DatabaseDatabase对象打开数据库,以得到一个对对象打开数据库,以得到一个
12、对 ModelModel 对象的引用,然后再向对象的引用,然后再向 ModelModel 对象请求一个对象请求一个 ElementElement 对象,最后向对象,最后向 ElementElement对象查询所需的信息。而如果能创建一个对象查询所需的信息。而如果能创建一个 DatabaseFacadeDatabaseFacade 类,让类,让 ClientClient 对象向它发出请求,那么上面的过程可能对象向它发出请求,那么上面的过程可能就会变得简单一些。就会变得简单一些。2.请举例说明 Facade 模式和 Adapter 模式使用场景的差异,并说明它们的解决方案及表现的特点。第第 7 7
13、 章章 Adapter(Adapter(适配器适配器)模式模式 一.选择 1.Adapter(适配器)模式的意图是()。A.希望简化现有系统的使用方法。你需要定义自己的借口。B B将一个无法控制的现有对象与一个特定借口相匹配。将一个无法控制的现有对象与一个特定借口相匹配。C.将一组实现部分从另一组使用它们的对象中分离出来。D你需要为特定的客户(或情况)提供特定系列的对象。2.下面不属于创建型模式的有()。A抽象工厂模式(Abstract Factory)B工厂方法模式(Factory Method)C C适配器模式适配器模式 (AdapterAdapter)D单例模式(Singleton)3.
14、将一个类的接口转换成客户希望的另一个接口。这句话是对下列哪种模式的描述()。A.策略模式(Strategies)B桥接模式(Bridge)C C适配器模式(适配器模式(AdapterAdapter)D单例模式(Singleton)4.以下关于结构型模式说法不正确的是。()A)结构型模式可以在不破坏类封装性的基础上,实现新的功能。B B)结构型模式主要用于创建一组对象。)结构型模式主要用于创建一组对象。C)结构型模式可以创建一组类的统一访问接口。D)结构型模式可以在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。二.填空 1.适配器模式,分为类的适配器和对象的适配器两种实现。其中类
15、的适配器采用的是继承关系,而对象适配器采用的是(组合聚合组合聚合)关系。2.Adapter 模式有两种类型有:对象 Adapter 模式、(类类 AdapterAdapter 模式模式)。3.UML 是一种用来创建(程序模型程序模型)的图像语言。4.(AdapterAdapter 适配器适配器)模式使原本接口不兼容而不能一起工作的类可以一起工作。5.适配器模式,分为类的适配器和对象的适配器两种实现。其中类的适配器采用的是(继承继承)关系,而对象适配器采用的是组合聚类关系。三.判断 1.对象适配器模式是合成聚合复用原则的典型应用。对对 2.Adapter 模式使原本由于接口不兼容而不能一起工作的
16、那些类可以一起工作。对对 3.Faade 模式和 Adapter 模式是相同类型的包装器。错错 4.Adapter 模式不是必须针对某个接口进行设计。错错 四.名词解释 1.Adapter 模式 将一个类的接口转换成客户希望的另外一个接口。将一个类的接口转换成客户希望的另外一个接口。AdapterAdapter 模式使原本由于接口不兼容而不能一起工作的那些模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。类可以一起工作。2.对象 Adapter 模式 使用使用 AdapterAdapter 模式与适当的抽象类相匹配,它通常模式与适当的抽象类相匹配,它通常依赖于一个对象(适配对象)包含
17、另一个对象(被适配对象)。依赖于一个对象(适配对象)包含另一个对象(被适配对象)。3.类 Adapter 模式 当实现当实现 AdapterAdapter 模式的方法是使用多重继承。在这种情况下,它被成为类模式的方法是使用多重继承。在这种情况下,它被成为类 AdapterAdapter 模式。模式。4.多态 相关的对象按照各自类型来实现方法的能力。相关的对象按照各自类型来实现方法的能力。五.简答题 1.给出 Adapter 模式的定义及意图。意图是将一个类的接口转换成客户希望的另外一个接口。意图是将一个类的接口转换成客户希望的另外一个接口。AdapterAdapter 模式使原本由于接口不兼容
18、而不能一起工作模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。的那些类可以一起工作。2.Adapter 模式的最常见的用法是什么?该模式可以使你不用操心什么方面?AdapterAdapter 模式最通常的用途就是保持多态。模式最通常的用途就是保持多态。AdapterAdapter 模式让我们在进行设计时不必再担心现存类的接口问题。模式让我们在进行设计时不必再担心现存类的接口问题。3.Adapter 模式问题的解决方案以及如何实现?解决方案是解决方案是 AdapterAdapter 模式用我们需要的接口对无法修改的类进行包装。实现:将现存的类包含在另一个类之中。模式用我们需要的接口对
19、无法修改的类进行包装。实现:将现存的类包含在另一个类之中。包容类与需要的接口相匹配,并调用被包容类的方法。包容类与需要的接口相匹配,并调用被包容类的方法。4.请简要说明在软件设计中设计模式的作用?软件设计模式(软件设计模式(Design PatternDesign Pattern)是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结。)是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结。使用设计模式是为了适应需求变化、可重用代码、让代码更使用设计模式是为了适应需求变化、可重用代码、让代码更容易被他人理解、保证代码的可靠性。容易被他人理解、保证代码的可靠性。六.应用题
20、1.根据你的理解,请分析 Faade 模式比 Adapter 模式的相同点和不同点,并说明它们在实际应用中的差异?在两个模式中,都拥有现存的类,但是在在两个模式中,都拥有现存的类,但是在 FaadeFaade 模式中,无须针对某个接口进行设计;而在模式中,无须针对某个接口进行设计;而在 AdapterAdapter 模式中模式中则必须针对某个特定接口进行设计。在则必须针对某个特定接口进行设计。在 FaadeFaade 模式中,动机是简化接口,而在模式中,动机是简化接口,而在 AdapterAdapter 模式中,尽管也是越简单模式中,尽管也是越简单越好,目的是针对一个现有的接口进行设计,并不能
21、简化任何东西,即使可能有另一个更简单的接口。总之,在实越好,目的是针对一个现有的接口进行设计,并不能简化任何东西,即使可能有另一个更简单的接口。总之,在实际应用中,际应用中,FaadeFaade 模式简化接口,模式简化接口,而而 AdapterAdapter 模式将接口转换成另一个现有的接口。模式将接口转换成另一个现有的接口。2.请说明什么是 Adapter 模式,Adapter 模式有哪几种形式?请举例说明?第第 8 8 章章 扩展我们的视野扩展我们的视野 第第 9 9 章章 Bridge(Bridge(桥接桥接)模式模式 一.选择 1.关于继承表述错误的是:()。A.继承是一种通过扩展一个
22、已有对象的实现,从而获得新功能的复用方法。B.超类可以显式地捕获那些公共的属性和方法。子类则通过附加属性和方法来进行实现的扩展。C.在一定意义上说破坏了封装性,因为这会将父类的实现细节暴露给子类。D.D.继承本质上是“白盒复用”,继承本质上是“白盒复用”,对父类的修改,不会影响到子类。对父类的修改,不会影响到子类。2.在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。主要体现在()。A 外观模式(Facade)B 装饰模式(Decorator)C 策略模式(Strategies)D D 桥接模式桥接模式(Bridge)(Bridge)3.行为类模式使用()在类间分派行为。A 接口
23、 B B 继承机制继承机制 C 对象组合 D 委托 4.下面的类图表示的是哪个设计模式?()。A 抽象工厂模式(Abstract Factory)B 观察者模式(Observer)C 策略模式(Strategies)D D 桥接模式桥接模式(Bridge)(Bridge)5.Bridge(桥接)模式的意图是()。A.希望简化现有系统的使用方法。你需要定义自己的借口。B将一个无法控制的现有对象与一个特定借口相匹配。C.C.将一组实现部分从另一组使用它们的对象中分离出来。将一组实现部分从另一组使用它们的对象中分离出来。D你需要为特定的客户(或情况)提供特定系列的对象。6.按照四人团的说法,Brid
24、ge 模式的意图是()。A.A.将抽象部分与它的实现部分将抽象部分与它的实现部分相相分离分离,使它们可以独立地变化使它们可以独立地变化.B.将抽象部分与它的实现部分相分离,但它们不能独立地变化.C.将抽象部分与它的实现部分相结合,但它们可以独立地变化.D.将抽象部分与它的实现部分相结合,使它们相互依赖.7.以下叙述不对的是()。A.Bridge 模式是将抽象部分与它的实现部分分离,使它们可以独立地变化.B.Bridge 模式是发现并封装不同点的极好例子.C C.Bridge.Bridge 模式优先使用继承而不是组合模式优先使用继承而不是组合.D.Bridge 模式优先使用组合而不是继承.8.以
25、下叙述不对的是()。A.A.学习设计模式学习设计模式告诉我们要尽可能使用继承告诉我们要尽可能使用继承.B.学习设计模式通常可以找到比仅采用面向对象方法更好的解决方案.C.学习设计模式告诉我们要尽可能使用组合.D.Bridge 模式适用于一个抽象部分拥有不同的实现部分的情形 9.对 Alexander 的模式哲学,以下叙述正确的是()。A 学习设计模式,可以完全解决软件开发中的变化情况.B.B.每个模式每个模式,可以无数次使用模式提供的解决方案可以无数次使用模式提供的解决方案,而不必再次重复同样的工作方式而不必再次重复同样的工作方式.C.设计模式总是可以为需求的变化提供更好的解决方案.D.设计模
26、式描述一个在开发的软件环境中不断产生新的问题时,能提供很好的解决方案.10.根据 Coplien 关于共同点/变化点的说法,下面哪个是正确的()。A.共同点分析就是寻找一个不会随时间变化的结构,而变化点分析就是捕捉变化的内容.B.B.共同点分析是寻找家族成员的相同元素共同点分析是寻找家族成员的相同元素.C.在一个系统中,共同点和不同点的关系是相对的,可以互相转化.D.共同点通常由父类实现,而变化点通常由子类实现.二.填空 1.在存在继承关系的情况下,方法向超类方向集中,而数据向(子类子类)方向集中。2.当存在一个抽象有不同实现时 Bridge 模式最为有用,它可以使抽象和(实现实现)相互独立地
27、进行变化。3.(类型的封装类型的封装)是通过多态使用具有派生类的抽象类实现的。4.在进行设计以应对变化的过程中,应该遵循两条基本策略:找出变化并(封装变化点封装变化点);优先使用对象组合,而不是类继承。5.C+中,必须用一个定义(公共接口公共接口)的抽象类来实现 Bridge 模式的实现部分。6.为了提高内聚和(松耦合松耦合),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。7.封装性好的代码更容易测试,因为它与其他代码没有(耦合耦合)。8.Bridge(桥接)模式是将抽象部分与它的实现部分分离,其中(实现部分实现部分)是指用来实现抽象类的派生类的对象。9.在进行设计以应对变化的过程中
28、,应该遵循两条基本策略:找出变化并封装变化点;优先使用对象(组合组合),而不是类继承。三.判断 1.为了提高内聚和紧耦合,我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。错错 2.继承本质上是“白盒复用”,对父类的修改,不会影响到子类。错错 3.继承是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法。对对 4.即使在不知道如何实现 Bridge(桥接)模式时,你也可以判断出在这种情况下这个模式是适用的。对对 5.在创建设计以处理变化的过程中,应该优先使用类继承,而不是使用对象组合。错错 6.只有在共同点分析定义的上下文中,变化点才有意义。对对 7.变化点就是领域问题的特殊情形,
29、而共同点则是指一般情形。错错 8.Bridge 模式就是为系统提供一种高内聚,松耦合的解决方案。对对 9.当需要增加系统的功能时,应当采用 Bridge 模式。错错 10.封装就是指数据隐藏。错错 四.名词解释 1.抽象 是指不同事物之间概念上的联系方式。是指不同事物之间概念上的联系方式。2.重构 修改代码改进结构但不增加新功修改代码改进结构但不增加新功能,就是所谓重构。能,就是所谓重构。3.内聚性 指的是例程中操作之间联系的紧密程度。指的是例程中操作之间联系的紧密程度。4.耦合性 指的是两个例程之间联系的紧密程度。指的是两个例程之间联系的紧密程度。5.Bridge(桥梁)模式 将抽象化与实现
30、化脱耦,使得二者可以独立的变化就是说将他们之间的强关联变成弱关联,也就是指在一个软将抽象化与实现化脱耦,使得二者可以独立的变化就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。聚合关系而不是继承关系,从而使两者可以独立的变化。五.简答题 1.Bridge 模式要解决的基本问题是什么?BridgeBridge(桥接)模式适用于一个抽象部分拥有不同的实现部分的情况,它让抽象部分和实现部分可以各自独立(桥接)模式适用于一个抽象部分拥有不同的实现部分的情况,它让抽象部分和实现部分可
31、以各自独立的变的变化。化。2.给出 Bridge 模式的定义。采用 Bridge 模式的效果是什么?将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。效果是:“实聚合关系而不是继承关系,从而使两者可以独立的变化。效果是:“实现部分与使用它的对象的分离”增加了灵活性。客户对象不需要了解实现问题。现部分与使用它的对象的分离”增加了灵
32、活性。客户对象不需要了解实现问题。3.什么是“一条规则,一个地方”?抽象类经常让自己的方法实际使用实现部分对象。抽象部分的派生类将调用这些方法。这样如果需要修改,修抽象类经常让自己的方法实际使用实现部分对象。抽象部分的派生类将调用这些方法。这样如果需要修改,修改也会容易些,并且在实现整个模改也会容易些,并且在实现整个模式之前让你拥有一个好的起点。式之前让你拥有一个好的起点。4.在学习 Bridge(桥接)模式的过程中,应该遵循下列处理变化的基本策略是什么?找出变化并封装变化点;优先使用对象组合,而不是类继承。找出变化并封装变化点;优先使用对象组合,而不是类继承。5.Bridge(桥接)模式的解
33、决方案是什么,以及如何实现?解决的问题是:为所有的实现部分定义一个接口,让抽象类的所有派生类使用这个接口。实现:将实现部分封解决的问题是:为所有的实现部分定义一个接口,让抽象类的所有派生类使用这个接口。实现:将实现部分封装在一个抽象类中。在被实现的抽象部分基类中包含一个实现部分基类的句柄。装在一个抽象类中。在被实现的抽象部分基类中包含一个实现部分基类的句柄。六.应用题 1.根据你对 Bridge 模式的理解,概要描述使用该模式的应用要求,并给出相应的设计类图。当存在一个抽象有不同实现时当存在一个抽象有不同实现时 BridgeBridge 模式最为有用,它可以使抽象和实现相互独立地进行变化。模式
34、最为有用,它可以使抽象和实现相互独立地进行变化。2.举例说明使用 Bridge 模式的场合,给出在该场合下使用 Bridge 模式的解决方案,并说明该解决方案的优点。打印驱动程序是打印驱动程序是 BridgeBridge 模式最典型的例子,也是最适合应用模式最典型的例子,也是最适合应用 BridgeBridge 模式的场合。模式的场合。BridgeBridge 模式的真正威力在模式的真正威力在于它能够帮助我们看到什么时候应该从问题域中提取实现。也就是说,有时候有一个实体于它能够帮助我们看到什么时候应该从问题域中提取实现。也就是说,有时候有一个实体 X X 使用系统使用系统 S S,一个实体,一
35、个实体Y Y 使用系统使用系统 T T。我们可能认为。我们可能认为 X X 总是与总是与 S S 相伴,而相伴,而 Y Y 总是与总是与 T T 相伴,因此就将它们联系(耦合)起来。相伴,因此就将它们联系(耦合)起来。BridgeBridge 模式模式提醒我们,可以抽象出提醒我们,可以抽象出 S S 和和 T T,这样更好,也就是说,这样更好,也就是说,BridgeBridge 模式最有用的地方,是在解耦抽象与实现之前考虑模式最有用的地方,是在解耦抽象与实现之前考虑BridgeBridge 模式是否适用。模式是否适用。第第 1010 章章 Abstract Factory(Abstract F
36、actory(抽象工厂抽象工厂)模式模式 一.选择 1.静态工厂的核心角色是()。A.A.抽象产品抽象产品 B.具体产品 C.静态工厂 D.消费者 2.以下属于创建型模式的是()。A A 抽象工厂模式(抽象工厂模式(Abstract FactoryAbstract Factory)B 装饰模式(Decorator)C 外观模式(Facade)D 桥接模式(Bridge)3.下面的类图表示的是哪个设计模式?()。A A 抽象工厂模式抽象工厂模式 B 观察者模式 C 策略模式 D 桥接模式 4.Abstract Factory(抽象工厂)模式的意图是()。A.希望简化现有系统的使用方法。你需要定义
37、自己的借口。B将一个无法控制的现有对象与一个特定借口相匹配。C.将一组实现部分从另一组使用它们的对象中分离出来。D D提供一个创建一系列相关或相互依赖对象的接口,而无提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类需指定它们具体的类 5.在根据不同的机器选择设备驱动程序的案例中,以下叙述不准确的是()。A.可以使用 switch 语句选择驱动程序.B.可以使用继承来实现选择驱动程序,但它可能会产生类组合爆炸问题.C.可以选择抽象工厂模式实现,且能避免组合爆炸问题.D.D.使用继承的解决方案要比使用继承的解决方案要比 switchswitch 语句有更多的优势语句有更多的优势.
38、6.以下有关 Abstract Factory(抽象工厂)模式正确的是()。A Abstract Factory 的实例化方法就是具体工厂方法.B.AbstractB.Abstract FactoryFactory 类和具体工厂方法可以分离类和具体工厂方法可以分离,每个具体工厂负责一个抽象工厂方法接口的实现每个具体工厂负责一个抽象工厂方法接口的实现.C.由于 Abstract Factory 类和具体工厂方法可以分离,因此在实现时会产生更多的类.D.当问题存在相同的对象用于解决不同的情形时,应该使用抽象工厂模式.7.根据设计模式,有关抽象工厂模式的定义,准确的说法是()。A 工厂方法是一个抽象
39、类的派生类实现的。B B 要创造的东西本身是抽象定义的,工厂方法可以灵活实现。要创造的东西本身是抽象定义的,工厂方法可以灵活实现。C.抽象工厂只关注概念,而具体工厂创建抽象工厂。D 抽象工厂派生出具体工厂对象和实现方法。8.关于抽象工厂模式,以下叙述不正确的是()A A 客户对象不需要知道向谁请求所需的对象和如何使用这些对象。客户对象不需要知道向谁请求所需的对象和如何使用这些对象。B 抽象工厂类通过为每个不同类型的对象定义一个方法,来指定实例化哪个对象。C 具体工厂对象负责指定哪些对象要实例化。D 将抽象工厂模式和适配器模式结合在一起,可以将概念相似的对象当作同种对象处理。9.关于抽象工厂模式
40、(Abstract Factory),以下叙述正确的是()。A 抽象工厂相对具体工厂而言,可以理解为抽象工厂是抽象类,而具体工厂是对抽象工厂的继承,是抽象工厂的子类。B 抽象工厂类不能实例化,具体工厂可以实例化。C C 抽象工厂定义接口,具体工厂实现某一接口。抽象工厂定义接口,具体工厂实现某一接口。D 抽象工厂模式将使用哪些对象的规则与如何使用这些对象的逻辑有效地结合起来。10.下面属于创建型模式的有()。A A抽象工厂(抽象工厂(Abstract Factory Abstract Factory)模式)模式 B外观(Facade)模式 C适配器(Adapter)模式 D桥接(Bridge)模
41、式 二.填空 1.(抽象工厂抽象工厂)模式提供了一系列相关或相互依赖对象的接口而无需指定他们具体的类。2.工厂模式分为简单工厂,工厂方法,(工厂方法工厂方法)三种类型。3.Abstract Factory 模式就是用来解决这类问题的:要创建一组相关或者(相互依赖相互依赖)的对象。4.Abstract Factory 模式强调的是为创建多个相互依赖的对象提供一个(同一的接口同一的接口)。5.我们可以使用(抽象工厂抽象工厂)模式,不同应用程序都使用同一子系统。6.Abstract Factory 意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们(具体的类具体的类)。7.当一个系统要(
42、独立独立)于它的产品的创建、组合和表示时适合用 Abstract Factory 模式。8.Abstract Factory 模式为如何创建对象组的每个成员定义(接口接口)。9.抽象工厂模式是定义一个(抽象类抽象类),然后为每个组实现一个具体类。10.Abstract Factory 模式将如何执行对象(实例化实例化)规则从使用这些对象的客户对象提取出来。三.判断 1.抽象工厂模式提供了一系列相关或相互依赖对象的接口且必须指定他们具体的类。错错 2.Abstract Factory(抽象工厂)模式确保系统总能根据当前的情况获得合适的对象。对对 3.Abstract Factory(抽象工厂)模
43、式中,客户对象不需知道“向谁请求需要的对象”“如何使用这些对象”。错错 4.典型情况下,一个 Abstract Factory 对象将针对每种必须实例化的对象拥有一个方法。对对 5.决定需要哪个工厂对象,实际上是判断需要那个系列的对象。对对 6.从本质上看,switch 语句可以达到和抽象工厂相同的效果。错错 7.抽象工厂模式简化了设计过程。错错 8.一个抽象工厂对象总是要和一个具体工厂方法对象相结合。错错 9.抽象工厂模式告诉我们,要针对接口而不是实现进行设计。对对 10.使用抽象工厂方法与优先使用组合是相矛盾的。错错 四.名词解释 1.Abstract Factory(抽象工厂)模式 就是
44、用来解决这类问题的:要创建一组相关或者相互依赖的对象。就是用来解决这类问题的:要创建一组相关或者相互依赖的对象。2.组合爆炸 随着问题中元素的增加,所出现的可能组合数剧烈增加,形象的说法就是组合爆炸。随着问题中元素的增加,所出现的可能组合数剧烈增加,形象的说法就是组合爆炸。3.封装 任何形式的隐藏。对象对它们的数据进行封装。抽象类对它们派生出的具体类进行封装任何形式的隐藏。对象对它们的数据进行封装。抽象类对它们派生出的具体类进行封装 4.抽象类 为一组概念上相似的类定义方法和公共属性。抽象类绝对不能被实例化。为一组概念上相似的类定义方法和公共属性。抽象类绝对不能被实例化。5.具体类 是能被直接
45、实例化的类、用例、信号、其他类元或其他泛化元是能被直接实例化的类、用例、信号、其他类元或其他泛化元素,它也可以用来描述实现的操作。素,它也可以用来描述实现的操作。五.简答题 1.Abstract Factory 的三个关键策略是什么?发现并封装变化点;优先使用对象组合,而不是类继承;针对接口设计,而不是针对实现设计。发现并封装变化点;优先使用对象组合,而不是类继承;针对接口设计,而不是针对实现设计。2.采用 Abstract Factory 模式的效果是什么?效果:这个模式将“使用哪些对象”的规则与“”如何使用这些对象“的逻辑相隔离。效果:这个模式将“使用哪些对象”的规则与“”如何使用这些对象
46、“的逻辑相隔离。3.为什么这个模式被称为“Abstract Factory”?因为它要创建的东西本身是由抽象定义的。工厂各种变化的实现如何选择,模式并没有具体规定。因为它要创建的东西本身是由抽象定义的。工厂各种变化的实现如何选择,模式并没有具体规定。4.如何获得正确的工厂对象?决定需要哪个工厂对象实际上是判断需要哪个系列的对象。如何知道自己需要哪个系列呢?在类似的案例中,决定需要哪个工厂对象实际上是判断需要哪个系列的对象。如何知道自己需要哪个系列呢?在类似的案例中,最可能的是由一个配置文件来告诉我们。然后就可以写几行代码,根据这些配置信息来将合适的工厂对象实例化。最可能的是由一个配置文件来告诉
47、我们。然后就可以写几行代码,根据这些配置信息来将合适的工厂对象实例化。5.在 Abstract Factory(抽象工厂)模式中对象的角色是什么?客户对象只知道“向谁请求需要的对象”和“如何使用这些对象”。客户对象只知道“向谁请求需要的对象”和“如何使用这些对象”。Abstract FactoryAbstract Factory 类通过“为每种不同类类通过“为每种不同类型的对象定义一个方法来指定”哪些对象可以被实例化。典型情况下,一个型的对象定义一个方法来指定”哪些对象可以被实例化。典型情况下,一个 Abstract FactorAbstract Factor 对象将针对每对象将针对每种必须种
48、必须实例化的对象拥有一个方法。具体工厂指定哪些对象将被实例化。实例化的对象拥有一个方法。具体工厂指定哪些对象将被实例化。六.应用题 1.请结合抽象工厂模式,说明在实际应用中如何生成正确的对象。决定需要哪个工厂对象实际上与确定使用哪一组对象是相同的。例如,在驱动程序问题中,有一组低分辨率动决定需要哪个工厂对象实际上与确定使用哪一组对象是相同的。例如,在驱动程序问题中,有一组低分辨率动程序和一组高分辨率驱动程序,怎样才能知道自己需要哪一组呢?程序和一组高分辨率驱动程序,怎样才能知道自己需要哪一组呢?在类似这样的例子中,很可能通过一个配置文在类似这样的例子中,很可能通过一个配置文件获知这一信息。然后
49、可以编写几行代码,根据配置信息将合适的工厂对象实例化。还可以使用件获知这一信息。然后可以编写几行代码,根据配置信息将合适的工厂对象实例化。还可以使用 Abstract FactoryAbstract Factory模式,不同应用程序都使用同一子系统。在这种情况下,工厂对模式,不同应用程序都使用同一子系统。在这种情况下,工厂对象将传给子系统,告诉子系统将要使用哪些对象,象将传给子系统,告诉子系统将要使用哪些对象,此时,通常主系统知道子系统需要那一组对象,在调用子系统之前,将实例化正确的工厂对象。此时,通常主系统知道子系统需要那一组对象,在调用子系统之前,将实例化正确的工厂对象。2.在抽象工厂模式
50、中?有哪两种工厂?它们的作用什么?使用抽象工厂模式有什么优点?第第 1212 章章 用模式解决用模式解决 CAD/CAMCAD/CAM 问题问题 一.选择 1.应用设计模式的一个优点是()。A A适应需求变化适应需求变化 B.程序易于理解 C减少开发过程中的代码开发工作量 D.简化软件系统的设计 2.当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式。A.A.创建型创建型 B.结构型 C 行为型 D.以上都可以 3.实现部分各不相同,但都可以通过一个通用接口被访问是()模式中的包容变化。A.BridgeA.Bridge B.Abstract Factory C.Adapter