设计模式总复习题

更新时间:2023-12-10 14:52:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

总复习题

复习参考资料: 1. GoF 设计模式 2. 设计模式解析 3. 易学设计模式 4. 大话设计模式 5. 深入浅出设计模式

以参考资料为主,模拟试题1-5中有些题答案在一些附加资料中

模拟试题1

一、 选择题(分值20)

1. 设计模式一般用来解决什么样的问题( )

A.同一问题的不同表相 B不同问题的同一表相 C.不同问题的不同表相 D.以上都不是 2. 下列属于面向对象基本原则的是( ) A.继承 B.封装 C.里氏代换 D都不是

3. Open-Close原则的含义是一个软件实体( ) A.应当对扩展开放,对修改关闭. B.应当对修改开放,对扩展关闭 C.应当对继承开放,对修改关闭 D.以上都不对

4. 当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用( )模式。 A.创建型 B.结构型 C行为型 D.以上都可以

5. 要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程,是( )的表述 A. 开-闭原则 B. 接口隔离原则 C. 里氏代换原则 D. 依赖倒转原则

6. 依据设计模式思想,程序开发中应优先使用的是( )关系实现复用。 A, 委派 B.继承 C创建 D.以上都不对 7. 设计模式的两大主题是( )

A.系统的维护与开发 B 对象组合与类的继承 C.系统架构与系统开发 D.系统复用与系统扩展

8. 单体模式中,两个基本要点( )和单体类自己提供单例 A .构造函数私有 B.唯一实例 C.静态工厂方法 D.以上都不对

9. 下列模式中,属于行为模式的是( ) A.工厂模式 B观察者 C适配器 以上都是

10. “不要和陌生人说话” 是( )原则的通俗表述

A.接口隔离 B.里氏代换 C.依赖倒转 D.迪米特 二、 填空题(分值20)

1. 软件体系结构是指一个系统的有目的的设计和规划,这个设计规划既不描述 ,也不描述 ,它只描述系统的 及其相互的 。

2.一个UML模型只描述了一个系统 ,它并没告诉我们系统是 。

3.接口是可以在整个模型中反复使用的一组行为,是一个没有 而只有 的类。

4.多重性指的是,某个类有 个对象可以和另一个类的 对象关联。 5.当一个类的对象可以充当多种角色时, 关联就可能发生。

6.在泛化关系中, 可以替代 。也就是说,后者出现的地方,前者都可以出现。但是反过来却不成立。

7.最通常的依赖关系是一个类操作的 中用到了 的定义。 8.组成是 的聚集,因为聚集中的每个部分体只能属于 整体。 9.实现的符号和继承的符号有相似之处,两者的唯一差别是实现关系用 表示,继承关系用 表示。

10. 设计模式中应优先使用 而不是 。 三、 判断题(分值15)

1. 适配器模式属于创建型模式( ) 2. 在设计模式中,“效果”只是指“原因和结果”( ) 3. 设计模式使代码编制不能真正工程化 ( )

4. 面向对象语言编程中的异常处理,可以理解为责任链模式( ) 5. 反模式就是反对在软件开发过程中使用设计模式( ) 四、问答题(分值30)

1. 什么是设计模式?设计模式目标是什么? 2. 设计模式中一般都遵循的原则有什么?

3. “Gang of Four”针对“创建优秀面向对象设计”建议了哪些策略? 4. 面向对象系统中功能复用的两种最常用技术是什么? 5. 只根据抽象类中定义的接口来操纵对象有什么好处? 五、应用题(分值15)

公司架构:经理、工程师、技师和后勤人员都是公司的雇员,经理管理工程师、技师和后勤人员。高层经理领导较低级别的经理。典型层次图如下:

可以使用哪种设计模式实现公司的层级关系?并说明为什么?

模拟试题2

一、 选择题(分值20)

1. 在观察者模式中,表述错误的是( ) A. 观察者角色的更新是被动的。 B. 被观察者可以通知观察者进行更新

C. 观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态进

行。

D. 以上表述全部错误。

2. 对于违反里式代换原则的两个类,可以采用的候选解决方案错误的是:( )

A. 创建一个新的抽象类C,作为两个具体类的超类,将A 和B 共同的行为移动到C 中,从

而解决A和B 行为不完全一致的问题。 B. 将B到A的继承关系改组成委派关系。 C. 区分是“IS-a”还是”Has-a”。如果是“Is-a”,可以使用继承关系,如果是”Has-a”

应该改成委派关系 D. 以上方案错误

3. 下列模式属于结构型设计模式的是( ) A. Composite

B. 享元(Flyweight)模式 C. 单体模式 D. 工厂方法

4. 关于继承表述错误的是:( )

A. 继承是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法。

B. 泛化类(超类)可以显式地捕获那些公共的属性和方法。特殊类(子类)则通过附加属性和方法来进行实现的扩展。

C. 破坏了封装性,因为这会将父类的实现细节暴露给子类。 D. 继承本质上是“白盒复用”,对父类的修改,不会影响到子类。 5. 对于依赖倒转的表述错误的是( )

A. 依赖于抽象而不依赖于具体,也就是针对接口编程。

B. 依赖倒转的接口并非语法意义上的接口,而是一个类对其他对象进行调用时,所知道的方法集合。

C. 从选项B的角度论述,一个对象可以有多个接口。

D. 实现了同一接口的对象,可以在运行期间,顺利地进行替换。而且不必知道所用的对象是那个实现类的实例。 E. 此题没有正确答案。

6. 可以使用哪一种设计模式限制类的实例唯一?( ) A. 工厂方法 B. 生成器模式 C. 原型模式 D.单体模式

7. Java数据库连接库JDBC用到哪种设计模式( )? A. 生成器 B.工厂方法 C.抽象工厂 D.单体

8. 关于运用GOF工厂方法的效果Consequences,说法不正确的是( ) A. 将客户代码与应用相关的类解耦 B. 它使得所涉及的产品系列可替换 C. 它有利于产品的一致性 D.它较易于支持新种类的产品

8. 在应用程序中可用哪些设计模式分离出算法?( ) A. 工厂方法 B. 策略模式 C. 访问者模式 D. 装饰器模式

9. 工厂方法也称为( ) A. 抽象工厂 B. 抽象构造器 C. 虚工厂 D. 虚构造器

10. 可以使用哪种设计模式将抽象和实现解耦,使得抽象和实现可以独自变化?( ) A. 适配器模式 B.桥接模式 C. 外观模式 D.组合桥接模式

二、 填空题(分值20)

1. 面向对象的七条基本原则包括:开闭原则,里式代换原则,合成聚合原则以及( ),

( ),( ),( )。

2. 在存在继承关系的情况下,方法向( )方向集中,而数据向( )方向集中。 3. 适配器模式,分为类的适配器和对象的适配器两种实现。其中类的适配器采用的是

( )关系,而对象适配器采用的是( )关系。

4. 设计模式的四个基本要素是( ),( ),( )和( )。

5. .创建型模式的根本意图是要把( )和( )的责任进行分离,从而降

低系统的( )。

6. 工厂模式分为( ),( ),( )三种类型。 7. 门面模式是( )法则的典型运用

8. MVC模型的基本工作原理是基于( )模式,实现是基于( )模式

9. 设计模式的思想根源是( )基本原则的宏观运用,本质上是没有任何模式的,发现模

式的人永远是大师,而死守模式的人,最对只能是一个工匠. 三、 判断题(分值15)

1. 虚拟代理可以使用一个小对象代替大对象,从而减少系统的资源的消耗,提高系统运行

速度。( )

2. 命令模式可以消除请求发送者与请求接收者彼此之间的耦合,使得对象之间的关系更加

灵活。( )

3. 解释器模式是对象行为型模式,通常较少使用。( ) 4. 迭代器模式是开闭原则最好体现,因为迭代器模式将聚合对象和迭代器分离开来。( )

A. 抽象工厂模式(Abstract Factory) B. 工厂方法模式(Factory Method) C. 命令模式(Command)

D. 责任链模式(Chain of Responsibility) 6. 下面的类图表示的是哪个设计模式?

A. 代理模式(Proxy) B. 装饰模式(Decorator) C. 桥接模式(Bridge) D. 观察者模式(Observer) 7. 下面的类图表示的是哪个模式?

A. 代理模式(Proxy) B. 外观模式(Facade)

C. 适配器模式(Adapter) D. 桥接模式(Bridge) 8. 下面的类图表明了哪个模式?

A. 责任链模式(Chain of Responsibility) B. 命令模式(Command) C. 备忘录模式(Memento)

D. 工厂方法模式(Factory Method) 9. 下面的类图表示的是哪个设计模式?

A. 模板方法模式(Template Method) B. 命令模式(Command)

C. 单例模式(Singleton) D. 状态模式(State)

10. 下面的类图表明了哪个模式?

A. 模板方法模式(Template Method) B. 命令模式(Command)

C. 单例模式(Singleton) D. 状态模式(State)

二、 填空题(分值20)

请从外观、访问者、组合、工厂方法、模板方法、观察者、享元、原型、责任链、单例、抽象工厂、命令12 种模式中选择10 种填入下列的空缺中。

1. ( )模式中,父类负责定义创建对象的公共接口,子类则负责生 成具体的对象。

2.( )模式提供一系列相关或相互依赖对象的接口而无需指定它们具体的类。

3.( )模式用原型实例指定创建对象的种类,并且通过拷贝这些原型实例创建新的对象。

4.( )模式确保某一个类仅有一个实例,并自行实例化并向整个系统提供这个实例。 5. ( )模式将对象组合成树形结构以表示“部分-整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。

6. ( )模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,为子系统中的一组接口提供一个一致的界面。

7. ( )模式运用共享技术有效地支持大量细粒度的对象。

8. ( )模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。

9. ( )模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。

10. ( )模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

三、简答题(分值30) 关于设计模式,请回答:

A) 什么是设计模式?设计模式的目标是什么?(3 分) B) 设计模式具有哪三大特点?(3 分)

C) GOF 设计模式常用的有几种?GOF 设计模式按照模式的目的可分为哪三类?(4 分)

1. 简述面向对象程序设计的六大基本原则?(6分)

2. 简述什么是单例模式,以及他解决的问题,应用的环境,解决的方案,模式的本质? (8

分)

3. 为什么面向对象的分析和设计中优先使用组合,而非继承?

四、程序阅读题(分值15) 在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDecorator 与FootDecorator 分别完成打印票据的台头和脚注的功能。已知该程序运行后的输出结果如下所示。

这是票据的台头! 这是票据正文! 这是票据的脚注!

------------------------ 这是票据的台头! 这是票据的脚注! [C++程序代码]

#include using namespace std; class SalesTicket { public:

virtual void printTicket() { cout << \这是票据正文!\};

class Decorator : public SalesTicket{

SalesTicket *ticket; public:

Decorator(SalesTicket *t){ ticket = t; } void printTicket(){ if(ticket != NULL) ticket->printTicket(); } };

class HeadDecorator : public Decorator{ public:

HeadDecorator(SalesTicket *t): Decorator(t) { } void printTicket() {

cout << \这是票据的台头!\Decorator::printTicket(); } };

class FootDecorator :public Decorator{ public:

FootDecorator(SalesTicket *t): Decorator(t){ } void printTicket() {

Decorator::printTicket();

cout << \这是票据的脚注!\} };

void main(void) { SalesTicket t;

FootDecorator f(&t); HeadDecorator h(&f); h.printTicket();

cout << \FootDecorator a(NULL); HeadDecorator b(&a); b.printTicket(); }

请根据题目描述、程序和输出,阐述采用该设计模式进行设计的优势?

五、应用题(分值15)

一般的企业采购审批都是分级的,采购量的不同就需要不同层次的主管人员来审批,如主任可以审批1 万元以下的采购单,副董事长可以申批2.5 万元以下的采购单,董事长可以审批10万元以下的采购单,10 万元以上的采购单就需要开会决定。请根据该描述,选择合适的设计模式并给出其类图。

模拟试题5

一、 选择题(分值20)

1. 以动作和事务闻名,且以对象形式用来封装回滚、日志或者事务功能。这种设计模式是( )

A. 责任链模式 B.命令模式 C. 观察者模式 D. 策略模式

2. 以下不属于创建型模式是 ( )

A. PROXY(代理)B. BUILDER(生成器)C. PROTOTYPE原型 D. SINGLETON单件 3. 以下不属于结构型模式是? ( )

A. COMPOSITE(组合)B. ADAPTER(适配器)C. FLYWEIGHT(享元)D. SINGLETON(单例) 4. 以下不属于行为型模式是? ( ) A. COMMAND(命令) B. STRATEGY(策略)

C. MEMENTO(备忘录) D. BRIDGE(桥接)

5. 以下意图那个是用来描述BUILDER(生成器)?( )

A. 定义一个用于创建对象的接口,让子类决定实例化哪一个类

B. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 C. 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 D. 运用共享技术有效地支持大量细粒度的对象。

6. 以下意图那个是用来描述PROTOTYPE(原型)?( )

A. 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 B. 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各 元素的类的前提下定义作用于这些元素的新操作。

C. 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。

D. 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 7. 以下意图那个是用来描述ADAPTER(适配器)?( )

A. 将一个类的接口转换成客户希望的另外一个接口。本模式使得原本由于接口不兼容而不

能一起工作的那些类可以一起工作。

B. 定义一个用于创建对象的接口,让子类决定实例化哪一个类

C. 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

D. 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 8. 以下意图那个是用来描述BRIDGE(桥接)?( )

A. 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 B. 将抽象部分与它的实现部分分离,使它们都可以独立地变化。

C. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 D. 动态地给一个对象添加一些额外的职责。

本文来源:https://www.bwwdw.com/article/8hz5.html

Top