您的当前位置:首页设计模式复习1.0范文

设计模式复习1.0范文

2021-11-08 来源:乌哈旅游
设计模式复习1.0范⽂

创建型模式:

抽象⼯⼚模式(Abstract Factory)、建造者模式(Builder)、⼯⼚⽅法模式(Factory Method)原型模式(Prototype)、单例模式(Singleton)结构型模式:

适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)⾏为型模式:

职责链模式(Chain of Responsibility)、命令模式(Command)、观察者模式(Observer)、模板⽅法模式(Template Method)2. 接⼝:包含了⼀系列不被实现的⽅法,⽽把这些⽅法的实现交给继承它的类。3. 组合⼀个类是另⼀个类的组成成分。

4. 多态:相关的对象按照各⾃类型来实现⽅法的能⼒。1. 抽象是指不同事物之间概念上的联系⽅式。

2. 重构修改代码改进结构但不增加新功能,就是所谓重构。3. 内聚性指的是例程中操作之间联系的紧密程度。4. 耦合性指的是两个例程之间联系的紧密程度。

2. 组合爆炸:随着问题中元素的增加,所出现的可能组合数剧烈增加,形象的说法就是组合爆炸。3. 封装:任何形式的隐藏。对象对它们的数据进⾏封装。抽象类对它们派⽣出的具体类进⾏封装4. 抽象类:为⼀组概念上相似的类定义⽅法和公共属性。抽象类绝对不能被实例化。

5. 具体类:是能被直接实例化的类、⽤例、信号、其他类元或其他泛化元素,它也可以⽤来描述实现的操作。2. 结构型模式:将现存的对象结合在⼀起,处理接⼝,将实现与抽象类联系起来。

3. ⾏为型模式:提供⼀种显得灵活(变化)的⾏为,包容变化的模式。例如,strategy 模式和observer模式。4. 创建型模式:创建或实例化对象

2. 重载:⼀个类中的⽅法与另⼀个⽅法同名,但是参数表不同,这种⽅法称之为重载⽅法。3. 虚拟⽅法:当实例⽅法声明包含virtual修饰符时,称该⽅法为虚拟⽅法。2. 构造函数:对对象进⾏初始化或初始设置。

3. 规格:⽣产的成品或所使⽤的原材料等规定的质量标准。3. 多线程:在单个程序中同时运⾏多个线程完成不同的⼯作,称为多线程.

第5章设计模式试题

1. 设计模式具有的优点(适应需求变化)

2. 设计模式⼀般⽤来解决什么样的问题(同⼀问题的不同表相)。3. 设计模式的两⼤主题是(系统复⽤与系统扩展)。

4. 以下哪些问题通过应⽤设计模式不能够解决。(确定软件的功能都正确实现)2. 设计模式基本原则包括:开闭原则,(从场景进⾏设计的原则),包容变化原则。3. 设计模式是⼀个(抽象)的⽅案,它可以解决⼀类问题。4. 1. 在设计模式群体中,效果是指(原因和结果)。

2. 模板:模式定义⼀个操作中的算法的⾻架,⽽将⼀些步骤延迟到⼦类中。

3. 模式:就是解决某⼀类问题的⽅法论。把解决某类问题的⽅法总结归纳到理论⾼度,那就是模式。4. 内聚度:模块内部各成分彼此结合的紧密程度。1. 什么是设计模式?设计模式的⽬标是什么?

设计模式是⼀套被反复使⽤、多数⼈知晓的、经过分类编⽬的、代码设计经验的总结。使⽤设计模式是为了可重⽤代码、让代码更容易被他⼈理解、保证代码可靠性。2. 设计模式的基本要素有哪些?

名称,意图,问题,解决⽅案,参与者和协作者,效果,实现,GOF参考。3. 设计模式中⼀般都遵循的原则有什么?

开-闭原则,根据场景进⾏设计原则,优先组合原则,包容变化原则。4. 四⼈团针对“创建优秀⾯向对象设计”建议了哪些策略?

针对接⼝编程,优先使⽤对象组合⽽不是类继承,找到并封装变化点。第6章facade(外观)模式

1. 外观模式的作⽤是(为了系统中的⼀组功能调⽤提供⼀个⼀致的接⼝,这个接⼝使得这⼀⼦系统更加容易使⽤。)。1. Facade模式可以⽤来(隐藏)系统。该模式能够将系统作为⾃⼰的私有成员包含进来。

2. Fa?ade模式要解决的问题:只需要使⽤⼀个复杂系统的⼀个(⼦集)。或者,需要⽤⼀种特殊的⽅式与系统交互。3. Fa?ade模式不仅可以为⽅法调⽤创建更(简单)的接⼝,还可以减少客户必须处理的对象数量。

1. Fa?ade(外观)模式不仅可以为⽅法调⽤创建更简单的接⼝,还可以减少客户必须处理的对象数量。对Fa?ade模式:模式定义了⼀个⾼层接⼝,使得这⼀⼦系统更加容易使⽤,为⼦系统中的⼀组接⼝提供⼀个⼀致的界⾯。Fa?ade(外观)模式解决问题的⽅案是什么?如何实现?

Fa?ade向客户展现使⽤现有系统的⼀个新的接⼝。如何实现:定义⼀个(或⼀组)新的类来封装所需的接⼝。让新的类使⽤现有的系统。

2. 请简要说明在⼀个复杂系统中应⽤Fa?ade(外观)模式的优点。

当拥有⼀个复杂的系统时,Fa?ade(外观)模式使我们只需要使⽤它的⼀部分功能。最终我们将得到⼀个更简单,更容易使⽤的或根据我们的需要定制的系统。3. Fa?ade模式的意图是什么?

望那个简化现有系统的使⽤⽅法,需要定义⾃⼰的接⼝。

1.请论述在⼀个系统中应⽤Fa?ade(外观)模式的必要性,并给出⼀种解决⽅案。

Fa?ade(外观)模式不仅可以为⽅法调⽤创建更简单的接⼝,还可以减少客户必须处理的对象数量。举个例⼦。假设有⼀个Client对象,这个对象必须处理Database、Model、Element类的对象。Client必须⾸先通过Database对象打开数据库,以得到⼀个对Model对象的引⽤,然后再向Model对象请求⼀个Element对象,最后向Element对象查询所需的信息。⽽如果能创建⼀个DatabaseFacade类,让Client对象向它发出请求,那么上⾯的过程可能就会变得简单⼀些。第7章Adapter(适配器)模式

4. 以下关于结构型模式说法不正确的是。()

A)结构型模式可以在不破坏类封装性的基础上,实现新的功能。B)结构型模式主要⽤于创建⼀组对象。

C)结构型模式可以创建⼀组类的统⼀访问接⼝。

D)结构型模式可以在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进⾏交互。2. Adapter模式有两种类型有:对象Adapter模式、(类Adapter模式)。

3. UML是⼀种⽤来创建(程序模型)的图像语⾔。

5. 适配器模式,分为类的适配器和对象的适配器两种实现。其中类的适配器采⽤的是(继承)关系,⽽对象适配器采⽤的是组合聚类关系。

1. 对象适配器模式是合成聚合复⽤原则的典型应⽤。对

2. 对象Adapter模式:使⽤Adapter模式与适当的抽象类相匹配,它通常依赖于⼀个对象(适配对象)包含另⼀个对象(被适配对象)。

3. 类Adapter模式:当实现Adapter模式的⽅法是使⽤多重继承。在这种情况下,它被成为类Adapter 模式。1. 给出Adapter模式的定义及意图。

意图是将⼀个类的接⼝转换成客户希望的另外⼀个接⼝。Adapter模式使原本由于接⼝不兼容⽽不能⼀起⼯作的那些类可以⼀起⼯作。

2. Adapter模式的最常见的⽤法是什么?该模式可以使你不⽤操⼼什么⽅⾯?

Adapter模式最通常的⽤途就是保持多态。Adapter 模式让我们在进⾏设计时不必再担⼼现存类的接⼝问题。3. Adapter模式问题的解决⽅案以及如何实现?

解决⽅案是Adapter模式⽤我们需要的接⼝对⽆法修改的类进⾏包装。实现:将现存的类包含在另⼀个类之中。包容类与需要的接⼝相匹配,并调⽤被包容类的⽅法。4. 请简要说明在软件设计中设计模式的作⽤?

软件设计模式(Design Pattern)是⼀套被反复使⽤、多数⼈知晓的、经过分类编⽬的代码设计经验的总结。使⽤设计模式是为了适应需求变化、可重⽤代码、让代码更容易被他⼈理解、保证代码的可靠性。

1. 根据你的理解,请分析Fa?ade模式⽐Adapter 模式的相同点和不同点,并说明它们在实际应⽤中的差异?

在两个模式中,都拥有现存的类,但是在Fa?ade 模式中,⽆须针对某个接⼝进⾏设计;⽽在Adapter 模式中则必须针对某个特定接⼝进⾏设计。在Fa?ade 模式中,动机是简化接⼝,⽽在Adapter模式中,尽管也是越简单越好,⽬的是针对⼀个现有的接⼝进⾏设计,并不能简化任何东西,即使可能有另⼀个更简单的接⼝。总之,在实际应⽤中,Fa?ade模式简化接⼝,⽽Adapter模式将接⼝转换成另⼀个现有的接⼝。第9章Bridge(桥接)模式

1. 关于继承表述错误的是:(继承本质上是“⽩盒复⽤”,对⽗类的修改,不会影响到⼦类。)。2. 在不破坏类封装性的基础上,使得类可以同不

曾估计到的系统进⾏交互。主要体现在(桥接模式(Bridge))。3. ⾏为类模式使⽤(继承机制)在类间分派⾏为。

4. 下⾯的类图表⽰的是哪个设计模式?(桥接模式(Bridge))。

5. Bridge(桥接)模式的意图是(将⼀组实现部分从另⼀组使⽤它们的对象中分离出来使它们可以独⽴地变化)。7. 以下叙述不对的是(Bridge模式优先使⽤继承⽽不是组合.)。

9. 对Alexander的模式哲学,以下叙述正确的是(每个模式,可以⽆数次使⽤模式提供的解决⽅案,⽽不必再次重复同样的⼯作⽅式.)。

10. 根据Coplien关于共同点/变化点的说法,下⾯哪个是正确的(共同点分析是寻找家族成员的相同元素. )。1. 在存在继承关系的情况下,⽅法向超类⽅向集中,⽽数据向(⼦类)⽅向集中。

2. 当存在⼀个抽象有不同实现时Bridge模式最为有⽤,它可以使抽象和(实现)相互独⽴地进⾏变化。3. (类型的封装)是通过多态使⽤具有派⽣类的抽象类实现的。

5. C++中,必须⽤⼀个定义(公共接⼝)的抽象类来实现Bridge模式的实现部分。

6. 为了提⾼内聚和(松耦合),我们经常会抽象出⼀些类的公共接⼝以形成抽象基类或者接⼝。

7. 封装性好的代码更容易测试,因为它与其他代码没有(耦合)。

8. Bridge(桥接)模式是将抽象部分与它的实现部分分离,其中(实现部分)是指⽤来实现抽象类的派⽣类的对象。1. Bridge模式要解决的基本问题是什么?

Bridge(桥接)模式适⽤于⼀个抽象部分拥有不同的实现部分的情况,它让抽象部分和实现部分可以各⾃独⽴的变化。2. 给出Bridge模式的定义。采⽤Bridge模式的效果是什么?

将抽象化与实现化脱耦,使得⼆者可以独⽴的变化,也就是说将他们之间的强关联变成弱关联,也就是指在⼀个软件系统的抽象化和实现化之间使⽤组合/聚合关系⽽不是继承关系,从⽽使两者可以独⽴的变化。效果是:“实现部分与使⽤它的对象的分离”增加了灵活性。客户对象不需要了解实现问题。3. 什么是“⼀条规则,⼀个地⽅”?

抽象类经常让⾃⼰的⽅法实际使⽤实现部分对象。抽象部分的派⽣类将调⽤这些⽅法。这样如果需要修改,修改也会容易些,并且在实现整个模式之前让你拥有⼀个好的起点。

4. 在学习Bridge(桥接)模式的过程中,应该遵循下列处理变化的基本策略是什么?找出变化并封装变化点;优先使⽤对象组合,⽽不是类继承。5. Bridge(桥接)模式的解决⽅案是什么,以及如何实现?

解决的问题是:为所有的实现部分定义⼀个接⼝,让抽象类的所有派⽣类使⽤这个接⼝。实现:将实现部分封装在⼀个抽象类中。在被实现的抽象部分基类中包含⼀个实现部分基类的句柄。

1. 根据你对Bridge 模式的理解,概要描述使⽤该模式的应⽤要求,并给出相应的设计类图。当存在⼀个抽象有不同实现时Bridge模式最为有⽤,它可以使抽象和实现相互独⽴地进⾏变化。

2. 举例说明使⽤Bridge 模式的场合,给出在该场合下使⽤Bridge 模式的解决⽅案,并说明该解决⽅案的优点。

打印驱动程序是Bridge模式最典型的例⼦,也是最适合应⽤Bridge模式的场合。Bridge模式的真正威⼒在于它能够帮助我们看到什么时候应该从问题域中提取实现。也就是说,有时候有⼀个实体X使⽤系统S,⼀个实体Y使⽤系统T。我们可能认为X总是与S 相伴,⽽Y总是与T相伴,因此就将它们联系(耦合)起来。Bridge模式提醒我们,可以抽象出S和T,这样更好,也就是说,Bridge模式最有⽤的地⽅,是在解耦抽象与实现之前考虑Bridge模式是否适⽤。

第10章Abstract Factory(抽象⼯⼚)模式1. 静态⼯⼚的核⼼⾓⾊是(抽象产品)。

4. Abstract Factory(抽象⼯⼚)模式的意图是(提供⼀个创建⼀系列相关或相互依赖对象的接⼝,⽽⽆需指定它们具体的类)。

5. 在根据不同的机器选择设备驱动程序的案例中,以下叙述不准确的是()。A. 可以使⽤switch语句选择驱动程序.

B. 可以使⽤继承来实现选择驱动程序,但它可能会产⽣类组合爆炸问题..C. 可以选择抽象⼯⼚模式实现,且能避免组合爆炸问题.

D. 使⽤继承的解决⽅案要⽐switch语句有更多的优势.

6. 以下有关Abstract Factory(抽象⼯⼚)模式正确的是(Abstract Factory类和具体⼯⼚⽅法可以分离,每个具体⼯⼚负责⼀个抽象⼯⼚⽅法接⼝的实现. )。

7. 根据《设计模式》,有关抽象⼯⼚模式的定义,准确的说法是(要创造的东西本⾝是抽象定义的,⼯⼚⽅法可以灵活实现)。

8. 关于抽象⼯⼚模式,以下叙述不正确的是(客户对象不需要知道向谁请求所需的对象和如何使⽤这些对象。)9. 关于抽象⼯⼚模式(Abstract Factory ),以下叙述正确的是(抽象⼯⼚定义接⼝,具体⼯⼚实现某⼀接⼝)。2. ⼯⼚模式分为简单⼯⼚,⼯⼚⽅法,( 抽象⼯⼚)三种类型。

4. Abstract Factory模式强调的是为创建多个相互依赖的对象提供⼀个(同⼀的接⼝)。5. 我们可以使⽤(抽象⼯⼚)模式,不同应⽤程序都使⽤同⼀⼦系统。

7. 当⼀个系统要(独⽴)于它的产品的创建、组合和表⽰时适合⽤Abstract Factory模式。8. Abstract Factory模式为如何创建对象组的每个成员定义(接⼝)。9. 抽象⼯⼚模式是定义⼀个(抽象类),然后为每个组实现⼀个具体类。

10. Abstract Factory模式将如何执⾏对象(实例化)规则从使⽤这些对象的客户对象提取出来。1. Abstract Factory(抽象⼯⼚)模式

就是⽤来解决这类问题的:要创建⼀组相关或者相互依赖的对象。1. Abstract Factory的三个关键策略是什么?

发现并封装变化点;优先使⽤对象组合,⽽不是类继承;针对接⼝设计,⽽不是针对实现设计。2. 采⽤Abstract Factory模式的效果是什么?

效果:这个模式将“使⽤哪些对象”的规则与“”如何使⽤这些对象“的逻辑相隔离。3. 为什么这个模式被称为“Abstract Factory”?

因为它要创建的东西本⾝是由抽象定义的。⼯⼚各种变化的实现如何选择,模式并没有具体规定。4. 如何获得正确的⼯⼚对象?

决定需要哪个⼯⼚对象实际上是判断需要哪个系列的对象。如何知道⾃⼰需要哪个系列呢?在类似的案例中,最可能的是由⼀个配置⽂件来告诉我们。然后就可以写⼏⾏代码,根据这些配置信息来将合适的⼯⼚对象实例化。5. 在Abstract Factory(抽象⼯⼚)模式中对象的⾓⾊是什么?

客户对象只知道“向谁请求需要的对象”和“如何使⽤这些对象”。Abstract Factory类通过“为每种不同类型的对象定义⼀个⽅法来指定”哪些对象可以被实例化。典型情况下,⼀个Abstract Factor对象将针对每种必须实例化的对象拥有⼀个⽅法。具体⼯⼚指定哪些对象将被实例化。

1. 请结合抽象⼯⼚模式,说明在实际应⽤中如何⽣成正确的对象。

决定需要哪个⼯⼚对象实际上与确定使⽤哪⼀组对象是相同的。例如,在驱动程序问题中,有⼀组低分辨率动程序和⼀组⾼分辨率驱动程序,怎样才能知道⾃⼰需要哪⼀组呢?在类似这样的例⼦中,很可能通过⼀个配置⽂件获知这⼀信息。然后可以编写⼏⾏代码,根据配置信息将合适的⼯⼚对象实例化。还可以使⽤Abstract Factory模式,不同应⽤程序都使⽤同⼀⼦系统。在这种情况下,⼯⼚对象将传给⼦系统,告诉⼦系统将要使⽤哪些对象,此时,通常主系统知道⼦系统需要那⼀组对象,在调⽤⼦系统之前,将实例化正确的⼯⼚对象。第12章⽤模式解决CAD/CAM问题

2. 当我们想创建⼀个具体的对象⽽⼜不希望指定具体的类时,可以使⽤(创建型)模式。3. 实现部分各不相同,但都可以通过⼀个通⽤接⼝被访问是(Bridge)模式中的包容变化。

4. 以下哪⼀条是Alexander的场景原则:(当你有⼀个涉及创建对象的设计模式时,对象应为模式提供场景)。

5. 最⾼级别的模式约束其他的模式的不正确的叙述是(最⾼级别的模式是最重要的,其他的模式是次要的)。

1. 设计模式的思想根源是(开闭)基本原则的宏观运⽤,本质上是没有任何模式的,发现模式的⼈永远是⼤师,⽽死守模式的⼈,最多只能是⼀个⼯匠。

2. 模式不仅仅是包容变化,它们还是变化之间的(关联)。

3. 系统中为其他模式确定场景的⼀个或两个模式,这个模式将对其他模式能做的事进⾏(约束)。4. 通常情况下,当⼀个模式使⽤另⼀个模式时,看起来被使⽤模式是在使⽤模式的(场景)之中的。5. 系统中的⼀个模式经常通过为系统中的其他模式提供(场景)与其他模式相关联。1. 场景:⼀些事物存在或发⽣的相互关联的状态。2. CVA:共同点/变化点分析

3. 场景原则:当有⼀个涉及创建对象的设计模式时,这些对象为这个模式提供场景。1. 考虑场景时使⽤的⼀条原则是什么?

考虑在系统中需要什么,然后再关⼼如何实现它。这也符合Alexander的场景原则:当有⼀个涉及创建对象的设计模式时,这些对象为这个模式提供场景。2. ⽤模式的⽅法思考的步骤是什么?

发现在问题领域中拥有的模式,这些是需要分析的模式;对于这些需要分析的模式,做下列⼯作:a.挑出为其他模式提供最多场景的模式。b. 在我的概念性最⾼的设计中使⽤这个模式。c.识别任何可能已经出现的附加模式。将它们添加到“需要分析的模式中”。

d.对于需要分析⽽还未分析的模式,重复上述过程;按照需要将细节添加到设计中。扩展⽅法和类定义。3. 场景和被使⽤模式之间有什么关联?

通常情况下,当⼀个模式使⽤另⼀个模式时,看起来被使⽤模式是在使⽤模式的场景之中的。这条规则也可能有例外,但是看起在⼤多数时候它都是有效的。4. 什么是“最⾼模式”?

指系统中为其他模式建⽴背景的⼀两个模式。这个模式将约束其他模式的⾏为。5. 为⼀个庞⼤的⼯程的CAD/CAM系统提供⽀持的基本需求是什么?

创建⼀个计算机程序,它能读取⼀个CAD/CAM数据集并从中提取部件,⼀个现有的专家系统需要这些部件才能进⾏智能设计。这个系统应该向CAD/CAM系统屏蔽专家系统。复杂的是CAD/CAM系统正处于变化之中。可能有CAD/CAM系统的多个潜在版本存在,⽽专家系统需要拥有它们的接⼝。第13章设计模式的原则和策略

1. Open-Close原则的含义是⼀个软件实体(应当对扩展开放.,对修改关闭)。2. 典型情况下,(Facade)模式不包容变化。

2. 最基本的UML图是(类图)。它不仅描述了类,⽽且说明了类之间的关系。3. 模块,⽅法和类应该对扩展是开放的,⽽对更改是(封闭)的。

4. Alexander告诉我们要从(场景)进⾏设计,在设计我们的⽚段出现的细节之前先创建整体视图。

5. Bridge模式不仅仅对抽象部分和实现部分的变化进⾏定义和包容,⽽且还定义了两个变化之间的(关联)。1. 什么是开-闭原则?

模块,⽅法和类应该对扩展是开放的,⽽对更改是封闭的。换句话说,我们必须将我们的软件设计成这样:我们可以在不修改代码的前提下对我们的软件进⾏扩展。

2. 哪些因素决定了⽤哪种⽅案来实现Abstract Factory模式?

未来变化的可能性;“不修改当前系统”的重要性;谁来控制将被创建的对象系列(是我们还是其他的开发组);使⽤的编程语

⾔;数据库或配置⽂件的可⽤性。3. 按照模式进⾏设计的策略是什么?1.开放-封闭的原则2.从场景进⾏设计3. 在类中包容变化。

4. 请举例说明如何根据模式为其他的模式创造场景来选择模式。

⽐如,Bridge-Facade关联,使⽤Facade模式来简化V1系统的接⼝,Bridge模式的实现部分之⼀使⽤Facade模式所创建的新接⼝。因此,Bridge模式为Facade模式创造了场景。5. 为什么说Bridge是包容变化原则的⼀个精彩的范例?

Bridge模式中的实现部分各不相同,但都可以通过⼀个通⽤接⼝被访问。系统可以接纳新的实现部分,只要它也使⽤这个通⽤接⼝来实现。

1. 在本书的应⽤案例中,为什么认为Bridge模式⾼于Adapter模式?请举例说明。

Bridge模式的应⽤情景是在概念的抽象有变化及其实现⽅式有多个。⽽Adapter模式的应⽤情景是原有对象的接⼝和需要的接⼝有差别。⽽⼤多数情景下Bridge模式是作为Adapter模式的背景。也就是Bridge 是Adapter的“最⾼模式”,在⽤Bridge模式封装实现

时,⼤多数的实现并不可以派⽣⾃相同的基类,这时Adapter模式就可以派上⽤场了。第16章Singleton(单件)和Double-CheckedLocking(双重检查锁定)模式

1. Singleton模式适⽤于(当这个唯⼀实例应该是通过⼦类化可扩展的,并且客户应该⽆需更改代码就能使⽤⼀个扩展的实例时)。

5. 单例模式(Singleton)(装饰)模式的意图是:(你希望只拥有⼀个对象,但不⽤全局对象来控制对象的实例化)。1. (单例)模式确保某⼀个类仅有⼀个实例,并⾃⾏实例化向整个系统提供这个实例。2. (单例)模式只应在有真正的“单⼀实例”的需求时才可使⽤。

4. Singleton(单件)模式和Double-Checked Locking 模式都⽤以确保⼀个特定的类只有⼀个对象被(实例化)。1. Singleton(单件)模式:保证⼀个类仅有⼀个实例,并提供⼀个访问它的全局访问点。2. Double-Checked Locking 模式:是singleton的多线程版本。1. Singleton(单件)模式怎样⼯作?

Singleton(单件)模式的⼯作⽅式是:拥有⼀个特定的⽅法,这个⽅法被⽤于实例化需要的对象。当这个⽅法被调⽤时,它检查这个对象是否已经被实例化。如果对象已经被实例化,这个⽅法仅仅返回这个对象的⼀个引⽤。如果对象尚未实例化,这个⽅法将对象实例化并返回这个新的实例的引⽤。为了确保这是创建这个类型的对象的惟⼀途径,在这个类中将构造函数定义为protected或private。

2. Singleton(单件)模式和Double-Checked Locking模式之间有什么区别?

Singleton(单件)模式⽤于单线程应⽤程序,⽽Double-Checked Locking模式⽤于多线程应⽤程序。3. 描述Singleton(单件)模式意图以及效果?

Singleton(单件)模式的意图是你希望只拥有⼀个对象,但不⽤全局对象来控制对象的实例化。效果是客户对象不需要关⼼是否已经有Singleton的实例存在。这可以在Singleton内部得到控制。4. Singleton(单件)模式的⽤途是什么?

它让我们可以仅仅对对象进⾏⼀次实例化,⽽不要求客户对象关⼼这个对象是否存在。1. 在⼀个多线程应⽤程序中,如果使⽤Singleton 模式,试分析可能会出现哪些问题。

出现A进程和B进程同时访问某个对象的时候,发现它没有实例化过,结果A、B进程分别将该类实例化⼀次,出现冗余对象的情况。这个情况并不多见,但是C++中出现了就是内存泄露的重⼤问题。第17章Observer(观察者)模式

1. 在观察者模式中,表述错误的是(观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态进⾏。)。

5. Observer模式不适⽤于(⼀个对象结构包含很多类对象,它们有不同的接⼝,⽽想对这些对象实施⼀些依赖于其具体类的操作。)。

9.对观察者模式,以下叙述不正确的是(必须找出所有希望获得通知的对象)。

10. 对于观察者模式,以下叙述正确的是(如果对象之间的以来关系是固定的,采⽤观察者模式会带来负⾯影响)。2. 观察者模式定义了⼀种(⼀对多)的依赖关系,让多个观察者对象同时监听某⼀个主题对象。4. 当依赖关系固定(或⼏乎固定)时,加⼊⼀个Observer模式可能只会增加(复杂性)。5.为了对所有Observer类型的对象实现Observer 接⼝,有时候需要使⽤(Adapter)模式。

6. 如果系统在不同的情况下运⾏,或由不同的⽤户运⾏,观察者列表会不同,这时适宜⽤(Observer)模式。7. ⼀个观察者可能只需要处理事件的某些情况,在这种情况下,观察者必须将额外的(通知)筛选掉。8. 对观察者模式,观察者通常将观察某个事件的责任交给(中⼼对象或Subject)。

9. Subject类将实现⼀个(notify)⽅法来遍历其Observer对象列表,并调⽤每个Observer对象的update⽅法。10. 当Subject对象有了已注册的Observer对象,事件发⽣时,Subject对象通知Observer对象将⾮常简单。为此,每个Observer对象都要实现⼀个(update)⽅法。

1. GOF设计模式按照模式的⽬的可分为哪三类?其⽬的分别是什么?

结构型:将现存的对象结合在⼀起。⾏为型:提供⼀种显得灵活(变化)⾏为。创建型:穿件或实例化对象。2. Observer模式的定义,它要解决什么样的问题?

Observer(观察者)模式定义对象间的⼀种⼀对多的依赖关系,当⼀个对象的状态发⽣改变时,所有

依赖于它的对象都得到通知并被⾃动更新。解决的问题是当某个事件发⽣时,你需要向⼀系列对象发出通知,⽽这个对象的列表是不断变化的。

3. Observer(观察者)模式的效果。

效果是如果某些Observer只对全部事件的⼀个⼦集感兴趣,那么Subject可能会告诉Observer它们不需要知道的事件。如果在Subject通知Observer之后,Observer⼜转过来请求附加信息,就可能需要额外的通信。4. Observer(观察者)模式如何实现解决⽅案的?

让“希望知道某个事件何时发⽣”的对象(Observer)将⾃⼰注册到另⼀个“监视事件发⽣或⾃⼰触发事件”的对象(Subject)上。当事件发⽣时,Subject告诉Observer“你关⼼的事情已经发⽣了”。为了能让所有的观察者型对象实现Observer接⼝,有时候需要使⽤Adapter模式。

1. 给出Observer的定义以及它的意图,举⼀个例⼦说明该模式的适⽤场景,最后画出它的类图。

定义对象间的⼀种⼀对多的依赖关系,当⼀个对象的状态发⽣改变时,所有依赖于它的对象都得到通知并被⾃动更新。解决的问题是当某个事件发⽣时,你需要向⼀系列对象发出通知,⽽这个对象的列表是不断变化的。例如,在Subject对象注册了它的⼀个Observer对象,当事件发⽣时,Subject对象向Observer 对象发出通知就⾮常简单了。为了实现这⼀功能,每个Observer类都实现⼀个叫做updata的⽅法。Subject 类这样实现notify⽅法:遍历⾃⼰的Observer对象列表,调⽤其中每个Observer对象的updata⽅法。Updata ⽅法应该包含处理事件的代码。

2. 根据你的理解,请你谈谈结构型和⾏为型模式的区别,并结合实际的应⽤举例说明。

结构型模式的⽬的是将现存的对象结合在⼀起,⽤途是处理接⼝,将实现与抽象类联系起来。⽽⾏为型模式的⽬的是提供⼀种显得灵活的⾏为,⽤途是包容变化的。例⼦:结构型模式中的Bridge模式或Decorator模式与⾏为型模式中的Strategy模式的⽐较。

第18章Template Method(模板⽅法)模式

2. 模板⽅法的作⽤是(在⽅法中定义算法的框架,⽽将算法中的⼀些操作步骤延迟到⼦类中实现)。4. 有关模板⽅法模式,以下叙述不正确的是(将定义和操作相互分离)。

5. 在采⽤模板⽅法模式对系统连接不同数据库(例如Oracle 和SQL Server)的连接时,以下叙述不正确的是(可以采⽤通⽤的实现⽅法建⽴对不同数据库的连接)。

1. Template Method模式准备⼀个抽象类,将部分逻辑以(具体⽅法)以及具体构造⼦类的形式实现,然后声明⼀些抽象⽅法来迫使⼦类实现剩余的逻辑。

2. Template Method(模版)模式是⽤以帮助从不同的步骤中抽象出⼀个(通过的)过程模式。3. Template Method(模版)模式让我们可以在抽象类中捕捉共同点⽽在(派⽣类)中封装不同点。

4. 当遇到⼀个⼼得数据库时,Template Method (模版)模式提供了⼀个(样板)让我们填充。我们创建⼀个新的派⽣类,并根据新的数据库的要求实现特定的步骤。

5. Template Method(模版)模式使得⼦类可以不改变⼀个算法的结构即可(重定义)该算法的某些特定步骤。1. Template Method(模版)模式

定义⼀个操作中的算法的⾻架,⽽将⼀些步骤延迟到⼦类中。Template Method使得⼦类可以不改变⼀个算法的结构即可重定义该算法的某些特定步骤。1. Template Method模式以怎样的⼀种特殊的⽅式进⾏⽅法调⽤?

Template Method(模版)模式可以这样做,因为对⽅法的调⽤是通过⼀个引⽤来进⾏的,⽽这个引⽤指向的对象属于某⼀个派⽣类。

2. Template Method(模版)模式如何定义,其效果是什么?

定义⼀个操作中的⾻架,⽽将⼀些步骤延迟到⼦类中。Template Method模式使得⼦类可以不改变⼀个算法的结构即可重定义该算法的某些特定步骤。效果:模版为代码复⽤提供了⼀个优秀的平台。它们还有助于确保需要的步骤得到实现。它们为每个具体类将重载后的步骤捆绑在⼀起,因此只有在这些重载⽅法总是并且只能⼀起发⽣时,才应该使⽤Template Method (模版)模式。

3. Template Method(模版)模式需要解决的问题是什么?解决⽅案是什么?

需要遵循⼀个过程或⼀系列步骤,它们在某个具体层次上保持⼀致,但单个步骤在更详细的层次上可能有不同的实现。解决⽅案:允许定义不同的⼦步骤,同时维护基本过程的⼀致性。4. 按照四⼈团的说法,Template Method模式的基本思想是什么?

定义⼀个操作中的算法的⾻架,⽽将⼀些步骤延迟到⼦类中。Template Method模式使得⼦类可以不改

变⼀个算法的结构即可重定义该算法的某些特定步骤。Template Method模式给了我们⼀条途径,让我们可以在抽象类中捕捉共同点⽽在派⽣类中封装不同点。第19章Factory Method(⼯⼚⽅法)模式

1. 下列关于静态⼯⼚与⼯⼚⽅法表述错误的是:()

A.两者都满⾜开闭原则:静态⼯⼚以if else⽅式创建对象,增加需求的时候会修改源代码。B.静态⼯⼚对具体产品的创建类别和创建时机的判断是混和在⼀起的,这点在⼯⼚⽅法是分开的。C不能形成静态⼯⼚的继承结构。

D.在⼯⼚⽅法模式中,对于存在继承等级结构的产品树,产品的创建是通过相应等级结构的⼯⼚创建的。

3. Factory Method(⼯⼚⽅法)模式的意图是:(定义⼀个⽤于创建对象的接⼝,让⼦类决定实例化哪⼀个类。将实例化延迟到其⼦类)

5. 关于⼯⼚⽅法,以下叙述不正确的是()。

A Factory Method是⼀个⽤于帮助分配创建责任的模式。B Factory Method模式和Abstract Factory模式总是配合使⽤。

C Factory Method适⽤于将对象实例化的规则推迟到某个派⽣类的情形。D Factory Method是属于创建型模式。

1. (⼯⼚⽅法)模式中,⽗类负责定义创建对象的接⼝,⼦类则负责⽣成具体的对象。

4. Factory Method(⼯⼚⽅法)模式在定义(框架)的过程中很常⽤,这是因为它存在于⼀个抽象的层次上。1. Abstract Factory模式如何由⼀系列Factory Method (⼯⼚⽅法)模式来实现?

在Abstract Factory模式的典型实现中,⽤⼀个抽象类来定义创建⼀族对象的⽅法。为每个可能拥有的对象族派⽣出⼀个具体类。这些⽅法全都在抽象类中定义,然后在派⽣类中被重载,这些⽅法遵循了Factory Method(⼯⼚⽅法)模式。2. Factory Method(⼯⼚⽅法)模式意图是什么?效果是什么?

意图是定义⼀个⽤于创建对象的接⼝,让⼦类决定实例化哪⼀个类。将实例化延迟到其⼦类。效果:客户将需要Creator的⼦类来创建⼀个特定的ConcreteProduct对象。

3. Factory Method(⼯⼚⽅法)模式的解决问题的⽅案是什么,如何实现?

意图是定义⼀个⽤于创建对象的接⼝,让⼦类决定实例化哪⼀个类。将实例化延迟到其⼦类。效果:客户将需要Creator的⼦类来创建⼀个特定的ConcreteProduct对象。4. 什么情况下适合使⽤Factory Method(⼯⼚⽅法)模式?a 当客户程序不需要知道要使⽤对象的创建过程。

b 客户程序使⽤的对象存在变动的可能,或者根本就不知道使⽤哪⼀个具体的对象。六.应⽤题

1. 请说明抽象⼯⼚和⼯⼚⽅法模式在应⽤中的不同作⽤,并说明在什么情形下使⽤抽象⼯⼚模式,什么情形下使⽤⼯⼚⽅法。

2. Factory Method的意图是什么?根据你知道的模式,它可能和哪些模式配合使⽤,试举例说明?

因篇幅问题不能全部显示,请点此查看更多更全内容