东大23年9月《软件设计模式》复习题及答案
发布时间:2023-09-19 00:09:54浏览次数:52 1 / 8东 北 大 学 继 续 教 育 学 院软件设计模式复习题一、单选题1. 常用的基本设计模式可分为(A)A.创建型、结构型和行为型 B. 对象型、结构型和行为型C.过程型、结构型和行为型 D. 抽象型、接口型和实现型2. 对以下开闭原则的描述错误的是(A)A.开闭原则与“对可变性的封装原则”没有相似性 B.找到个系统的可变元素,将它封装起来,叫开闭原则C.对修改关闭,是其原则之一D.从抽象层导出一个或多个新具体类可以改变系统的行为,是其原则之一3. “不要和陌生人说话”是(D)原则的通俗表述。A. 接口隔离 B. 里氏替换 C. 依赖倒置 D. 迪米特4. 当创建一个具体的对象而又不希望指定具体的类时,可以使用(D)A. 结构型 B. 创建型 C. 行为型 D.以上都可以5. 以下( C )是利用一个对象,快速地生成一批对象。A. 抽象工厂(Abstract Factory)模式 B. 原型(Prototype)模式C. 合成(Composite)模式 D. 桥接(Bridge)模式课程名称: 软件设计模式
2 / 86. 以下(B )用来描述建造者( Builder )。A. 定义一个用于创建对象的接口,让子类决定实例化哪一个类B. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示C. 保证一个类仅有一个实例,并提供→个访问它的全周访问点D. 运用共享技术有效地支持大量细粒度的对象7. 以下( C)用来描述工厂方法(Factory Method)模式。A. 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类B. 表示一个作用于某对象结构中的各元素的操作。它使用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作C. 定义一个用于创建对象的接口,让子类决定实例化哪一个类。该模式使一个类的实例化延迟到其子类D. 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化8. 对象适配器模式是(A )原则的典型应用。A. 将一个类的接口转换成客户希望的另外一个接口,本模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。B. 定义一个用于创建对象的接口,让子类决定实例化哪一个类课程名称: 软件设计模式
3 / 8C. 表示一个作用于某对象结构中的各元素的操作,它使用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作D. 将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作9. 关于模式适用性,以下(D )不适合使用 Flyweight(享元)模式。A. 一个应用程序使用了大量的对象B. 完全由于使用大量的对象, 造成很大的存储开销C. 对象的大多数状态都可变为外部状态D. 用户想使用一个已经存在的类,而它的接口不符合用户的需求10. 设计模式具有的优点(A)。A. 适应需求变化 B. 程序易于理解 C.减少开发过程中的代码开发工作量 D. 简化软件系统的设计二、多选题1. 以下是模式的基本要素的是(ABCD)。A. 名称 B. 意图 C. 解决方案 D. 参与者和协作者2. 以下属于创建型模式的是(AC)。A.抽象工厂(Ab stract Factory)模式 B.合成(Composite) 模式课程名称: 软件设计模式
4 / 8C. 单例(Singleton)模式 D. 桥接(Bridge)模式3. 以下关于结构型模式说法正确的是(ABCD )。 A. 结构型模式可以在不破坏类封装性的基础上, 实现新的功能B. 结构型模式主要用于创建一组对象C. 结构型模式可以创建一组类的统→访问接口D. 结构型模式可以在不破坏类封装性的基础上, 使类可以同不曾估计到的系统进行交互4. 以下属于行为对象模式的是(BCD )。A. 装饰(Decorator)模式 B. 迭代器(Iterator)模式 C. 命令(Command)模式 D. 中介者(Mediator)模式5. 下面(ACD)是访问者模式的优缺点。A. 访问者模式使得易于增加新的操作 B. 访问者集中相关的操作而分离无关的操作C. 增加新的 ConcreteElment 类很困难 D. 通过类层次进行访问6. 当应用工厂方法( Factory Method )模式时要考虑(ABCD)。A. 主要有两种不同的情况 B. 参数化工厂方法C. 特定语言的变化和问题 D. 使用模板以避免创建子类7. 以下属于结构型模式的是(AB)。A. 代理(Proxy) 模式 B. 合成(Composite)模式C. 命令(Command)模式 D.观察者(Observer)模式课程名称: 软件设计模式
5 / 88. 装饰( Decorator )模式的两个主要缺点是(CD)。A. 比静态继承更灵活 B.避免在层次结构高层的类有太多的特征C. 有许多小对象,很容易对它们进行定制,但是很难学习这些系统,排错也很困难D. 装饰与它的组成不一样,装饰是一个透明的包装9. 中介者模式有以下(ABD)优点。A. 简化了对象之间的交互 B. 简化了同事类的设计和实现C. 封装了转换规则 D. 减少了子类生成10. 关于模式适用性, 以下( ABC )适合使用享元(Flyweight)模式。A. 一个应用程序使用了大量的对象B. 完全由于使用大量的对象, 造成很大的存储开销C. 对象的大多数状态都可变为外部状态D. 用户想使用一个已经存在的类, 而它的接口不符合用户的需求三、判断题(共 10 分,每题 1 分;请在认为正确的题目后面写 T,错误的题目后面写 F)1. 设计模式的两大主题是系统复用与系统扩展。(T)2. 抽象工厂模式提供了一系列相关或相互依赖对象的接口且必须指定他们具体的类。( F)3. 对象适配器模式是依赖倒转原则的典型应用。(F)4. Open-Close 原则的含义是一个软件实体应当对扩展开放,对修改关闭。(T)5. Singleton(单例)模式属于结构性模式。(F)课程名称: 软件设计模式
6 / 86. 常用的设计模式可分为过程型、创建型和结构型。(F)7. 对观察者模式,触发事件的对象 Subject 对象不需要知道观察事件的所有对象。(T)8. 通过在问题领域中使用模式,可以用一种不同的方式来看待问题。(T)9. Strategy 模式可以用不同的方式调用所有的算法。(F)10. 当依赖关系固定(或几乎固定)时,加入一个 Observer(观察者)模式可能只会增加复杂性。(T)三、名词解释(共 15 分,每题 3 分)1.设计模式答: 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。2.开闭原则答: 一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的基础上扩展一个系统的行为。3.单一职责原则答: 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。4.依赖关系课程名称: 软件设计模式
7 / 8答:依赖关系是一种使用关系,它是对象之间相合度最弱的一种关联方式, 是临时性的关联。5.组合关系答:组合关系也是关联关系的一种,也表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系, 是 contains-a 关系。在组合关系中, 整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。四、简答题(共 15 分,每题 5 分)1. 设计模式一般有哪几个基本要素?设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式,其中的关键元素包括模式名称、问题、解决方案和效果。2. 创建型模式分包括哪几种设计模式,各是什么并简要说明。⑴ 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。⑵ 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。⑶ 工厂方法(Factory Method)模式:定义一个用于创建产品的接口,由子类决定生产什么产品。课程名称: 软件设计模式
8 / 8⑷ 抽象工厂(Abstract Factory)模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。⑸ 建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。3.试比较和分析中介者模式和观察者模式之间的相似性和差异性?两者是否能够相互转化?中介者模式和观察者模式的区别是,前者应用于多对多杂乱交互行为的统筹处理,后者应用于一(多)对多关系的灵活定制。对于本例来说,集中处理后还需要分散处理,那么后半阶段的处理过程可以应用观察者模式。对于前一节的例子来说,如果有多个主体角色和多个观察者进行多对多通讯的话,也可以应用中介者模式来统筹这个多对多的过程课程名称: 软件设计模式