1-2章
1. (单选题) 根据范围,模式主要处理类之间和对象之间的关系,可以分为类模式和( )两种类型。
A、关系模式
B、继承模式
C、对象模式
D、数据库模式
答案:C
2. (单选题) 设计模式具有( )的优点。
A、提高系统性能
B、降低软件模式和复杂度
C、减少代码开发工作量
D、提升软件设计的质量
答案:D
3. (单选题) 在面向对象软件的开发过程中,采用设计模式( )。
A、可以减少在设计和实现过程中需要创建的实例和对象的数量
B、可以保证程序的运行速度达到最优值
C、可以复用相似问题的相同解决方案
D、允许在非面向对象程序设计语言中使用面向对象的概念
答案:C
4. (单选题) ( )都是行为型设计模式。
A、组合模式、适配器模式和代理模式
B、观察者模式、职责链模式和策略模式
C、原型模式、建造者模式和单例模式
D、迭代器模式、命令模式和桥接模式
答案:B
5. (单选题) 常用的基本设计模式可分为( )。
A、创建型、结构型和行为型
B、对象型、结构型和行为型
C、过程型、结构型和行为型
D、抽象型、接口型和实现型
答案:A
6. (单选题) 设计模式的两大主题是( )。
A、系统的维护与开发
B、对象组合与类的继承
C、系统架构与系统开发
D、系统复用与系统扩展
答案:D
7. (单选题) 设计模式一般用来解决( )。
A、同一问题的不同表相
B、不同问题的同一表相
C、不同问题的不同表相
D、以上都不是
答案:A
8. (单选题) 设计模式的原理( )。
A、面对实现编程
B、面向对象编程
C、面向接口编程
D、面向组合编程
答案:C
9. (单选题) 下列属于面向对象基本原则的是( )
A、继承
B、里氏代换
C、封装
D、都不是
答案:B
10. (单选题) 关于单一职责原则,以下叙述错误的是( )。
A、一个类只负责一个功能领域中的相应职责
B、就一个类而言,应该有且仅有一个引起它变化的原因
C、当一个类承担的职责过多时,需要将职责进行分离,将不同的职责封装在不同的类中
D、一个类承担的职责过多,越容易复用,被复用的可能性越大
答案:D
11. (单选题) 在系统设计中应用迪米特法则,以下叙述有误的是( )。
A、在类的划分上,应该尽量创建松耦合的类,类的耦合度越低,复用越容易
B、如果两个类之间不必彼此直接通信,那么这两个类就不应该发生直接的相互作用
C、在对其他类的引用上,一个对象对其他对象的引用应该降到最低
D、在类的设计上,只要有可能,一个类型应该尽量设计成抽象类或接口,且成员变量和成员函数的访问权限最好设置为公开的(public)
答案:D
12. (单选题) 以下关于面向对象设计的叙述中,错误的是( )。
A、高层模块不应该依赖与低层模块
B、抽象不应该依赖于细节
C、细节可以依赖于抽象
D、高层模块无法不依赖于低层模块
答案:D
13. (单选题) 在面向对象软件开发过程中,采用设计模式( )。
A、可以减少在设计和实现过程中需要创建的实例对象的数量
B、可以保证程序的运行速度达到最优值
C、可以复用相似问题的相同解决方案
D、允许在非面向对象程序设计语言中使用面向对象的概念
答案:C
14. (单选题) 以下关于面向对象设计的描述正确的是( )。
A、针对接口编程,而不是针对实现编程
B、尽可能合并类的职责
C、接口与实现不可分割
D、优先使用继承而非组合
答案:A
15. (单选题) 开闭原则的含义是一个软件实体( )。
A、应当对扩展开放,对修改关闭
B、应当对修改开放,对扩展关闭
C、应当对继承开放,对修改关闭
D、以上都不对
答案:A
16. (单选题) 以下对开闭原则的描述错误的是( )。
A、开闭原则与“对可变性的封装原则”没有相似性
B、找到一个系统的可变元素,将它封装起来,叫开闭原则
C、对修改关闭,是其原则之一
D、从抽象层导出一个或多个新的具体类可以改变系统的行为,是其原则之一
答案:A
17. (单选题) “不要和陌生人说话”是( )原则的通俗表述。
A、接口隔离
B、里氏代换
C、依赖倒转
D、迪米特
答案:D
18. (单选题) 软件设计的第一步是( )。
A、画图建模
B、需求分析
C、编写代码
D、测试验证
答案:B
19. (单选题) 以下关于创建型模式说法正确的是( )。
A、创建型模式关注的是对象的创建
B、创建型模式关注的是功能的实现
C、创建型模式关注的是组织类和对象的常用方法
D、创建型模式关注的是对象间的协作
答案:A
20. (单选题) 以下不属于创建型模式的是( )。
A、代理(proxy)
B、生成器(Builder)
C、原型(Prototype)
D、单例(Singleton)
答案:A
二. 多选题(共5题,10.5分)
21. (多选题) 以下是模式的基本要素的是( )。
A、名称
B、意图
C、解决方案
D、参与者和协作者
答案:ABCD
22. (多选题) 面向对象系统中功能复用的最常用技术是( )。
A、类继承
B、对象组合
C、使用抽象类
D、使用实现类
答案:AB
23. (多选题) 以下( )通过应用设计模式能够解决。
A、指定对象的接口
B、排除软件bug
C、确定软件的功能都正确实现
D、设计应支持变化
答案:AD
24. (多选题) 常用的描述设计模式的格式有( )。
A、意图
B、动机
C、适用性
D、结构
答案:ABC
25. (多选题) 以下属于创建型模式的是( )。
A、抽象工厂(Abstract Factory)模式
B、组合(Composite)模式
C、单例(Singleton)模式
D、桥接(Bridge)模式
答案:AC
三. 填空题(共16题,34.3分)
- (填空题) 常用的基本设计模式可分为:创建型、______和_______。
答案:结构型 行为型
- (填空题) 设计模式的基本要素有模式名字______、______、______、_______、________和相关设计模式。
答案:目的 问题 解决方案 效果 实例代码
- (填空题) 在存在继承关系的情况下,方法向_______方向集中,而数据向 ______方向集中。
答案:(1)超类(2)子类
- (填空题) 用例是从________的观点对系统行为的一个描述。
答案:用户
- (填空题) 一个软件产品是否成功,因素有:______ 、________、_________、_软件的管理是否合理。
答案:需求收集是否正确 体系结构的构建是否合理 测试是否完全
- (填空题) 在找出了类的继承关系后,通常可以用_______来表示最上层的基类。
答案:接口
- (填空题) 开发过程中最困难的一个环节是_ __________。
答案:人与人的交流
- (填空题) 设计模式的基本要求有___________、____ ____、 ________、实施后达到的效果。
答案:名称 目的 解决方案
- (填空题) 面向对象系统中的“黑箱”复用是指_________。
答案:对象组合
- (填空题) 对象组合是通过获得________而在运行时刻动态定义的。
答案:抽象类的指针
- (填空题)面向对象的六条基本原则包括:开闭原则, ______,依赖倒转原则, ______ 、 ______ 以及接口隔离原则。
答案:里氏代换原则 单一职责原则 合成复用原则
- (填空题) 开闭原则是面向对象的可复用设计的基石,开闭原则是指一个软件实体应当对__________开放,对 ______关闭。
答案:扩展 修改
- (填空题) 里氏代换原则是指任何________可以出现的地方,_______一定可以出现。
答案:基类原则 子类对象
- (填空题) 创建型模式的根本意图是要把______和_______的责任进行分离,从而降低系统的_______。
答案:创建 使用 耦合度
- (填空题) 工厂模式分为简单工厂、________、____________3种类型。
答案:抽象工厂 工厂方法
- (填空题) 当创建一个具体的对象而又不希望指定具体的类时,可以使用_______模式。
答案:创建型
四. 简答题(共6题,13.2分)
42. (简答题) 由GOF提出的23种软件设计模式是哪一些?按照目的分类,分为哪几大类?每一类设计模式有何特点?
GoF提出的设计模式有23种,且大致可以分成三类: 创建型模式(Creational Patterns) 结构型模式(Structural Patterns) 行为型模式(Behavioral Patterns)
1) 创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
工厂模式(Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
单例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
2)结构型模式
这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
适配器模式(Adapter Pattern)
桥接模式(Bridge Pattern)
过滤器模式(Filter、Criteria Pattern)
组合模式(Composite Pattern)
装饰器模式(Decorator Pattern)
外观模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
3) 行为型模式
这些设计模式特别关注对象之间的通信。
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
空对象模式(Null Object Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
访问者模式(Visitor Pattern)
43. (简答题) 设计模式按类型分为哪三类?简要叙述各类型的含义。
设计模式按类型分为以下三类:
1)创建型设计模式:以灵活的方式创建对象集合,用于管理对象的创建。
2)结构型设计模式:将己有的代码集成到新的面向对象设计中,用于处理类或对象的 组合。
3)行为型设计模式:用于描述对类或对象怎样交互和怎样分配职责
44. (简答题) 简述依赖倒转原则的基本思想。
1、高层模块不应该依赖于底层模块、二者都应该依赖于抽象
2、抽象不应该依赖于细节、细节应该依赖与抽象
45. (简答题) 简述“开—闭”原则的基本思想。
软件实体应当对外扩展开放,对修改关闭
46. (简答题) 简述迪米特原则的思想。
一个对象应该尽可能少地与其他对象发生交互
47. (简答题) 简述设计模式的优点。
1、可以提高程序员的思维能力、编程能力和设计能力
2、使程序更加标准化,代码编制更加工程化,使软件开发效率大大提高
3、使设计的代码可重用性高、可读性强可靠性高、灵活性好、可维护性强
3-8章
1. (单选题) 静态工厂的核心角色是( )。
A、抽象产品
B、具体产品
C、静态工厂
D、消费者
答案:A
2. (单选题) 关于模式适用性,( )不适合使用工厂方法(Factory Method)模式。
A、当一个类不知道它所必须创建的对象的类的时候
B、当一个类希望由它的子类来指定它所创建的对象的时候
C、当用户提供一个产品类库,而只想显示它们的接口而不是实现时
D、当类将创建对象的职责委托给多个帮助子类中的某一个,并且用户希望将哪一个帮助子类是代理者这一信息局部化的时候
答案:C
3. (单选题) 下列关于静态工厂与工厂方法表述错误的是( )。
A、两者都满足开闭原则:静态工厂以if....else方式创建对象,增加需求的时候会修改源代码
B、静态工厂对具体产品的创建类别和创建时机的判断是混合在一起的,这点在工厂方法中解决了
C、不能形成静态工厂的继承结构
D、在工厂方法模式中,对存在继承等级结构的产品树,产品的创建是通过相应等级结构的工厂创建的
答案:A
4. (单选题) 以下( )用来描述工厂方法(Factory Method)模式。
A、提供一个创建一系列相关或者相互依赖对象的接口,而无须指定他们具体的类。
B、表示一个作用域某对象结构中的各元素的操作。它使用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作
C、定义一个用于创建对象的接口,让子类决定实例化哪一个类。该模式使一个类的实例化延迟到其子类
D、定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化
答案:C
5. (单选题) 以下( )用来描述抽象工厂(Abstract Factory)模式。
A、提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类
B、定义一个用于创建对象的接口,让子类决定实例化哪一个类
C、将一个类的接口转换成客户希望的另一个接口
D、表示一个作用于某对象结构中的各元素的操作
答案:A
6. (单选题) 关于模式适用性,( )不适合使用抽象工厂方法(Abstract Factory)模式。
A、一个系统要独立于它的产品的创建、组合和表示时
B、一个系统要由多个产品系列中的一个来配置时
C、当要强调一系列相关的产品对象的设计以便进行连和使用时
D、当一个类希望由它的子类来指定它所创建的对象的时候
答案:D
7. (单选题) 以下关于抽象工厂模式的叙述错误的是( )。
A、抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类
B、当系统中有多于一个产品族时可以考虑使用抽象工厂模式
C、当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效率
D、抽象工厂模式符合开闭原则,增加新的产品族和新的产品等级结构都很方便
答案:D
8. (单选题) 下列关于抽象工厂模式中的产品族和产品等级结构的叙述,错误的是( )。
A、产品等级结构是从不同的产品族中任意选取产品组成的层次结构
B、产品族是指由位于不同产品等级结构、功能相关的产品组成的家族
C、抽象工厂 是指一个工厂等级结构可以创建出分属于不同产 品等级结构的一个产品族中的所有对象
D、工厂方法模式对应唯一一个产品等级结构,而抽象工厂模式则需要对应多个产品等级结构
答案:A
9. (单选题) 以下关于建造者模式的叙述错误的是( )。
A、建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
B、建造者模式允许用户只通过指定复杂对象的类型和内容就可以创建它们,而不需要知道内部的具体构建细节
C、当需要创建的产品对象有复杂的内部结构时可以考虑使用建造者模式
D、在建造者模式中,各个具体的建造者相互之间通常具有较强的依赖关系,可通过指挥者类组装成一个完整的产品对象返回给客户
答案:D
10. (单选题) 关于模式适用性,( )可以使用建造者(Builder)模式。
A、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
B、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
C、当构造过程必须允许被构造的对象有不同的表示时
D、一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为
答案:B
11. (单选题) 关于建造者模式中的Director 类描述错误的是( )。
A: Director 类隔离了客户类及创建过程
B: 在建造者模式中,客户类指导Dreter类去生成对象或者合成一些类,并逐步构造一个复杂对象
C: Director 类构建一个抽象建造者Builder子类的对象
D: Director 与抽象工厂模式中的工厂类类似,负责返回一个产品族中的所有产品
答案:D
12. (单选题) 建造者的退化模式是通过省略( )角色完成退化的。
A、抽象产品
B、产品
C、指挥者
D、使用者
答案:C
13. (单选题) 以下关于原型模式叙述错误的是( )。
A、原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象
B、浅克隆仅复制所考虑的对象,而不复制它所引用的对象,也就是其中的成员对象并不复制
C、在原型模式中实现深克隆时通常需要编写较为复杂的代码
D、在原型模式中不需要为每一个类服备一个克隆方法,因此对于原型模式的扩展很灵活,对于已有类的改造也较为容易
答案:D
14. (单选题) 关于模式适用性,在( )不适合使用原型(Prototype)模式。
A、当要实例化的类是在运行时刻指定时,例如,通过动态装载
B、当要强调一系列相关的产品对象的设计以便进行联合使用时
C、为了避免创建一个与产品类层次平行的工厂类层次时
D、当一个类的实例只能有几个不同状态组合的一种时
答案:B
15. (单选题) 某公司要开发一个即时聊天软件,用户在聊天过程中可以与多位好友同时聊天,在私聊时将产生多个聊天窗口,为了提高聊天窗口的创建效率,要求根据第一个窗口快速创建 其他窗口。针对这种需求,采用( )进行设计最为合适。
A、享元模式
B、单例模式
C、原型模式
D、组合模式
答案:C
16. (单选题) 以下( )是利用一个对象,快速地生成一批对象。
A、抽象工厂(Abstract Factory)模式
B、合成(Compoite)模式
C、原型(Prototype)模式
D、桥接(Bridge)模式
答案:C
17. (单选题) ( )用来描述原型(Prototype)。
A、允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类
B、表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作
C、定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
D、用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象
答案:D
18. (单选题) 在( )时可使用单例模式。
A、隔离菜单项对象的创建和使用
B、防止一个资源管理器窗口被实例化多次
C、使用一个已有的查找算法而不想修改既有代码
D、不能创建子类,需要扩展一个数据过滤类
答案:B
19. (单选题) 以下关于单例模式的描述,正确的是( )。
A、描述了只有一个方法的类的集合
B、能够保证一个类只产生一个唯一的实例
C、描述了只有一个属性的类的集合
D、能够保证一个类的方法只能被一个唯的类调用
答案:B
20. (单选题) 以下( )不是单例模式的要点。
A、某个类只能有一个实例
B、单例类不能被继承
C、必须自行创建单个实例
D、必须自行向整个系统提供单个实例
答案:B
21. (单选题) 关于模式适用性,在( )适合使用单例(Singleton)模式。
A、当一个类不知道它所必须创建的对象的类的时候
B、当一个类的实例只能有几个不同状态组合中的一种时
C、当这个唯一的实例应该是通过子类化扩展的,并且客户应该无须更改代码就能使用一个扩展的实例时
D、当一个类希望由它的子类来指定它所创建的对象的时候
答案:C
22. (单选题) 以下( )用来描述单例(Singeleton)。
A、将一个类的接口转换成客户希望的另外一个接口。该模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
B、保证一个类仅有一个实例,并提供一个访问它的全局访问点
C、定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化
D、用于一个中介对象来封装一系列的对象交互
答案:B
二. 多选题(共6题,15.6分)
23. (多选题) 当应用工厂方法(Factory Method)模式时要考虑( )。
A、主要有两种不同的情况
B、参数化工厂方法
C、特定语言的变化和问题
D、使用模板避免创建子类
答案:ABCD
24. (多选题) 工厂方法(Factory Method)模式和原型(Prototype)模式之间的区别可以理解为( )。
A、Factory Method模式是重新创建一个对象
B、Prototype模式是重新创建一个对象
C、Prototype模式是利用现有的对象进行克隆
D、Factory Method模式是利用现有的对象进行克隆
答案:AC
25. (多选题) 以下有关抽象工厂(Abstract Factory)模式的优点和缺点描述正确的是( )。
A、它分离了具体的类
B、它使得易于交换产品系列
C、它有利于产品的一致性
D、难以支持新种类的产品
答案:ABCD
26. (多选题) 单例(Singleton)模式适用于( )。
A、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
B、当这个唯一实例应该自行创建并向系统提供时
C、当构造过程必须允许被构造的对象有不同的表示时
D、生成一批对象
答案:AB
27. (多选题) 单例模式中,两个基本要点( )和单子类自己提供单例。
A、构造函数私有
B、唯一实例
C、静态工厂方法
D、以上都不对
答案:AB
28. (多选题) 以下属于单例(Singleton)模式的优点的是( )。
A、对唯一实例的受控访问
B、允许对操作和表示的精化
C、允许可变数目的实例
D、比类操作更灵活
答案:ABCD
三. 填空题(共6题,15.6分)
29. (填空题) ________模式可以根据参数的不同返回不同类的实例。
答案:简单工厂
30. (填空题) 工厂方法模式的主要角色有: __________、___________、_ __________和具体产品(Concrete Product)。
答案:抽象工厂 具体工厂 抽象产品_
31. (填空题) 建造者模式包括:产品角色(Product)、_ _______、 ________、 __________等主要角色。
答案:指挥者 抽象建造者 具体建造者
32. (填空题) 当需要创建的对象具有复杂的内部结构时,为了逐步构造一个完整的对象,并使得对象的创建更具弹性,可以使用_____模式。
答案:建造者
33. (填空题) _ _____模式确保一个类只有一个实例,并提供一个全局访问点。
答案:单例
34. (填空题) 单例模式分为_________和_________两种。
答案:懒汉式 饿汉式
四. 简答题(共2题,5.2分)
35. (简答题) 什么是产品族?什么是产品等级?
产品族是指同一个工厂生产的,位于不同产品等级结构中的一组产品
产品等级结构即产品的继承结构
答案:产品的种类称为产品等级,而一个具体工厂所生产的位于不同等级的一组产品称为一个产品族。
36. (简答题) 简述原型模式的特点是什么?深克隆和浅克隆的区别?
• 深拷贝:除了对象本身被复制外,对象所包含的所有成员变量都会被复制,包括引用类型的成员对象
• 浅拷贝:只复制对象其中包含的基本数据类型的成员变量,而引用类型的成员对象没有被复制
答案:深拷贝:除了对象本身被复制外,对象所包含的所有成员变量都会被复制,包括引用类型的成员对象
浅拷贝:只复制对象其中包含的基本数据类型的成员变量,而引用类型的成员对象没有被复制
‘
五. 程序设计题(共3题,7.8分)
37. (程序设计题) 使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果向造人的工厂方法传入参数“M”,则返回一个男人(Man)对象,如果传入参数“W”,则返回一个女人(Woman)对象,绘制相应的类图并使用Java语言模拟实现该场景。现需要增加一个新的机器人(Robot)类,如果传入参数“R”,则返回一个机器人对象,对代码进行修改并注意“女娲”类的变化。
38. (程序设计题) 使用工厂方法模式设计一个程序用来读取各种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),例如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG图片读取器(JpgReader)用于读取JPG格式的图片,在设计时,要充分考虑系统的灵活性和可扩展性。
计算机包含内存(RAM)、CPU等硬件设备,根据下图“产品等级结构-产品族”所示,使用抽象工厂模式实现计算机硬件设备的创建过程,绘制相应的图类并使用Java语言编程模拟实现。
9-15章
一. 单选题(共29题,68.8分)
1. (单选题) 在对象适配器中,适配器类(Adapter)和适配者类(Adaptee)之间的关系为( )。
A、关联关系
B、依赖关系
C、继承关系
D、实现关系
答案:A
2. (单选题) ( )将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
A、命令(Command)模式
B、适配器(Adapter)模式
C、策略(Strategy)模式
D、单例(Singleton)模式
答案:B
3. (单选题) 以下关于适配器模式的叙述错误的是( )。
A、适配器模式将一个接口转换成客户希望的另一个接口,使得原本接口不兼容的那些类可以一起工作
B、在类适配器中,Adapter和Adaptee是继承关系,而在对象适配器中,Adapter和Adaptee是关联关系
C、类适配器比对象适配器更加灵活,在C#语言中可以通过类适配器一次适配多个适配者类
D、适配器可以在不修改原来的适配者接口Adaptee的情况下将一个类的接口和另一个类的接口匹配起来
答案:C
4. (单选题) 现需要开发一个文件转换软件,将文件由一种格式转换为另种格式,例如将XML文件转换为PDF文件,将DOC文件转换为TXT文件,有些文件格式转换代码已经存在,为了将已有的代码应用于新软件,而不需要修改软件的整体结构,可以使用( )模式进行系统设计。
A、适配器(Adapter)
B、组合(Composite)
C、外观(Facade)
D、桥接(Bridge)
答案:A
5. (单选题) 用来描述适配器(Adapter)的意图是( )。
A、将一个类的接口转换成客户希望的另一个接口,本模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作
B、定义一个用于创建对象的接口,让子类决定实例化哪一个类
C、表示一个作用于某对象结构中的各元素的操作,它使用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作
D、将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作
答案:A
6. (单选题) 对象适配器模式是( )原则的典型应用
A、合成复用原则
B、里氏代换原则
C、依赖倒转原则
D、迪米特法则
答案:A
7. (单选题) 关于模式适用性,不适合使用适配器(Adapter)模式的是( )。
A、用户想使用一个已经存在的类,而它的接口不符合用户的需求
B、用户想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作
C、用户想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口
D、如果删除对象的外部状态。那么可以用相对较少的共享对象取代很多组对象
答案:D
8. (单选题) ( )不是桥接模式所使用的环境。
A、一个可以跨平台并支持多种格式的文件编辑器
B、一个支持多数据源的报表生成工具,可以以不同的图形方式显示报表信息
C、一个可动态选择排序算法的数据操作工具
D、一个支持多种编程语言的跨平台开发工具
答案:C
9. (单选题) 以下关于桥接模式的叙述错误的是( )。
A、桥按模式的用意是将抽象化与实现化解耦,使得两者可以独立地变化
B、桥接模式将继承关系转换成关联关系,从而降低系统的耦合度
C、桥接模式可以动态地给一个对象增加功能这些功能也可以动态地撤销
D、桥接模式可以从接口中分离实现功能,使得设计更具有扩展性
答案:C
10. (单选题) 关于模式适用性,( )不适用使用桥接(Bridge)模式。
A、类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充,这时Bridge模式使用户可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充
B、用户不希望在抽象和它的实现部分之间有一个固定的绑定关系,例如,这种情况可能是因为在程序运行时刻实现部分应可以被选择或者切换
C、对一个抽象的实现部分应对客户不产生影响,即客户的代码不必重新编译
D、客户程序与抽象类的实现部分之间存在着很大的依赖性
答案:D
11. (单选题) 下关于组合模式的叙述错误的是( )。
A、组合模式对叶子对象和组合对象的使用具有一致性
B、组合模式可以很方便地保证在一个容器中只能有某些特定的构件
C、组合模式将对象组织到树形结构中,可以用来描述整体与部分的关系
D、组合模式使得用户可以很方便地在组合体中加入新的对象构件,且客户端不需要因为加
入新的对象构件而更改类库代码
答案:B
12. (单选题) 现需要开发一个XML文档处理软件,通过该软件用户可以根据关键字查询指定内容,可以在XML中任意选取某结点作为查询的初始结点,而无须关心该结点所处的层次 结构。针对该需求,可以使用( )模式来进行设计。
A、抽象工厂(Abstract Factory)
B、享元(Flyweight)
C、组合(Composite)
D、策略(Strategy)
答案:C
13. (单选题) 关于模式适用性,以下( )适合使用组合(Composite)模式。
A、用户想使用一个已经存在的类,而它的接口不符合用户的需求
B、当一个类的实例只能有几个不同状态组合中的一种时
C、用户想表示对象的部分-整体层次结构
D、一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为
答案:C
14. (单选题) 以下意图( )是用来描述组合(Composite)模式。
A、为其他对象提供一种代理以控制对这个对象的访问
B、运用共享技术有效地支持大量细粒度的对象
C、将对象组合成树形结构以表示“部分-整体”的层次结构
D、将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
答案:C
15. (单选题) 关于模式适用性,以下( )不适合使用组合(Composite)模式。
A、用户想使用一个已经存在的类,而它的接口不符合用户的需求
B、用户想表示对象的部分-整体层次结构
C、当一个类的实例只能有几个不同状态组合中的一种时
D、一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为
答案:B
16. (单选题) 一个树形文件系统体现了( )模式。
A、装饰(Decorator)
B、组合(Composite)
C、桥接( Bridge)
D、代理(Proxy)
答案:B
17. (单选题) 关于模式适用性,以下( )不适合使用装饰(Decorator)模式。
A、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责
B、处理那些可以撤销的职责
C、客户程序与抽象类的实现部分之间存在着很大的依赖性
D、当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数据呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类
答案:C
18. (单选题) 以下意图( )可用来描述装饰(Decorator)组合。
A、运用共享技术有效地支持大量细粒度的对象
B、用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象
C、将抽象部分与它的实现部分分离,使它们都可以独立变化
D、动态地给一个对象添加一些额外的职责
答案:D
19. (单选题) 下图是( )模式实例的结构图。
A、桥接(Bridge)
B、工厂方法(Factory Method)
C、模板方法(Template Method)
D、外观(Facade)
答案:D
20. (单选题) 以下意图( )可用来描述外观(Facade)模式。
A、为了系统种的一组接口提供一个一致的界面,本模式定义一个高层接口,这个接口使得这一子系统更加容易使用
B、定义一个用于创建对象的接口,让子类决定实例化哪一个类
C、保证一个类仅有一个实例,并提供一个访问它的全局访问点
D、在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
答案:A
21. (单选题) 关于模式适用性,以下情况不适合使用代理(Proxy)模式的是( )。
A、用户想使用一个已经存在的类,而它的接口不符合用户的需求
B、根据需要创建开销很大的对象
C、在需要用比较通用和复杂的对象指针代替简单的指针的时候
D、取代了简单的指针,它在访问对象时执行一些附加操作
答案:A
22. (单选题) 以下意图用来描述代理(Proxy)的是( )。
A、用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象
B、运用共享技术有效地支持大量细粒度的对象
C、对其他对象提供一种代理以控制对这个对象的访问
D、将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
答案:C
23. (单选题) ( )不是装饰模式的适用条件。
A、要扩展一个类的功能或给一个类增加附加责任
B、要动态地给一个对象增加功能.这些功能还可以动态撒销
C、要动态组合多于一个的抽象化角色和实现化角色
D、要通过一些基本功能的组合产生复杂功能,而不使用继承关系
答案:C
24. (单选题) 当不能采用生成子类的方法进行扩展时,可采用( )模式动态地给一个对象添加一些额外的职责。
A、外观(Facade)
B、参与者(Paticipant)
C、单例(Singleton)
D、装饰(Decorator)
答案:D
25. (单选题) 已知某子系统为外界提供功能服务,但该子系统中存在很多粒度十分小的类,不便被外界系统直接使用,采用( )模式可以定义一个高层接口,这个接口使得这一子系使更加容易使用。
A、外观(Facade)
B、单例(Singleton)
C、参与者(Participant)
D、装饰(Decorator)
答案:A
26. (单选题) 以下关于外观模式的叙述错误的是( )。
A、在外观模式中,一个子系统的外部与其内部的通信可以通过一个统的外观对象进行
B、在增加外观对象之后,客户类只需要直接和外观对象交互即可,与子系统类之间的复杂引用关系由外观对象来实现,降低了系统的耦合度
C、外观模式可以很好地限制客户类使用子系统类,对客户类访向子系统类做限制可以提高系统的灵活性
D、可以为一个系统提供多个外观类
答案:C
27. (单选题) 以下关于代理模式的叙述错误的是( )。
A、代理模式能够协调调用者和被调用者,从而在一定程度上降低系统的耦合度
B、控制对一个对象的访问,给不同的用户提供不同级别的使用权限时可以考虑使用远程代理
C、代理模式的缺点是请求的处理速度会变慢,并且实现代理模式需要额外的工作
D、 代理模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用
答案:B
28. (单选题) 代理模式有多种类型,其中,智能引用代理是指( )。
A、为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果
B、保护目标不让恶意用户接近
C、使几个用户能够同时使用一个对象而没有冲突
D、当一个对象被引用时,提供一些额外的操作,例如将此对象被调用的次数记录下来
答案:D
29. (单选题) Windows操作系统中的应用程序快捷方式是( )模式的应用实例。
A、代理(Proxy)
B、组合(Composite)
C、装饰(Decorator)
D、外观(Facade)
答案:A
二. 填空题(共10题,24分)
30. (填空题) 适配器模式的主要角色有:目标抽象类、______和______。
答案:适配者类 适配器类
31. (填空题) 适配器模式分为类适配器和对象适配器两种实现。其中类适配器采用的是___________关系,而对象适配器采用的是_____________关系。
答案:继承 组合
32. (填空题) 当桥接模式的实现化角色的接口与现有类的接口不一致时,可以在二者中间定义一个____________将二者连接起来。
答案:适配器
33. (填空题) 当我们想将抽象部分和实现部分分离时,使它们可以独立变化,可以使用_____________模式。
答案:桥接
34. (填空题) 组合模式分为_________的组合模式和_________安全式的组合模式。
答案:透明式 安全式
35. (填空题) 装饰模式主要包含以下角色:__________角色、___________角色、___________角色和具体装饰(Concrete Decorator)角色
答案:抽象构件 具体构件 抽象装饰
36. (填空题) 已知某子系统为外界提供功能服务,但该子系统中存在很多粒度十分小的类,不便被外界系统直接使用,采用________模式可以定又一个高层接口,这个接口使得这一子系统更加容易使用。
答案:外观
37. (填空题) 外观模式是___________法则的典型运用。
答案:迪米特
38. (填空题) 代理模式的主要角色有:抽象主题类、______和______。
答案:真实主题类 代理类
39. (填空题) 代理模式的扩展是____________。
答案:动态代理模式
三 判断题(共3题,7.2分)
40. (判断题) Windows中的目录结构蕴含了组合模式,其中,具体类型的文件充当叶子构件,文件夹充当容器构件。
答案:对
41. (判断题) 控制对一个对象的访问,给不同的用户提供不同级别的使用权限时可以考虑使用虚拟代理。
答案:错
42. (判断题)
Windows操作系统中的应用程序桌而快捷方式体现了代理模式。
答案:对
16-26章
一. 单选题(共21题,74.8分)
1. (单选题) 职责链模式不可以( )。
A、动态决定由一组对象中的某个对象处理该请求
B、动态指定处理一个请求的对象集合,并高效率地处理一个请求
C、使多个对象都有机会处理请求,避免请求的发送者和接收者之间的耦合关系
D、将对象连成一条链,并沿着该链传递请求
答案:B
2. (单选题) 接力赛跑体现了( )模式。
A、职责链(Chain of Responsibility)
B、命令(Command)
C、备忘录(Memento)
D、工厂方法(Factory Method)
答案:A
3. (单选题) 关于模式适用性,( )不适合使用职责链(Chain of Responsibility)模式。
A、有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定
B、在需要用比较通用和复杂的对象指针代替简单的指针的时候
C、用户想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求
D、可处理一个请求的对象集合应被动态指定
答案:B
4. (单选题) 迭代器模式用于处理具有( )性质的类。
A、抽象
B、聚集
C、单例
D、共享
答案:B
5. (单选题) 以下关于迭代器模式的叙述错误的是( )。
A、迭代器模式提供了一种方法来访问聚合对象,而无须暴露这个对象的内部表示
B、迭代器模式支持以不同的方式遍历一个聚合对象
C、迭代器模式定义了一个访问聚合元素的接口,并且可以跟踪当前遍历的元素,了解哪些元素已经遍历过而哪些没有
D、在抽象聚合类中定义了访问和遍历元素的方法并在具体聚合类中实现这些方法
答案:D
6. (单选题) 以下意图( )可用来描述迭代器(Iterator)。
A、使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系
B、用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象
C、提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示
D、运用共享技术有效地支持大量细粒度的对象
答案:C
7. (单选题) 在迭代器模式中,将数据存储与数据遍历分离,数据存储由聚合类负责,数据遍历由迭代器负责,这种设计方案是( )的具体应用。
A、依赖倒转原则
B、接口隔离原则
C、单一职责原则
D、合成复用原则
答案:C
8. (单选题) ( )根模式定义了对象间的种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知井自动刷新。
A、适配器(Adapter)
B、迭代器(terator)
C、原型(Prototype)
D、观察者(Observer)
答案:D
9. (单选题) 在观察者模式中,( )。
A、一个Subject对象可对应多个Observer对象
B、Subject只能有一个ConcreteSubject子类
C、Observer只能有一个ConereteObserver子类
D、一个Subject对象必须至少对应一Observer对象
答案:A
10. (单选题) 下面这句话隐含了( )模式。我
我和妹妹跟妈说:“妈妈,我和妹妹在院子里玩。饭做好了叫我们一声。”
A、适配器
B、职责链
C、观察者
D、迭代器
答案:C
11. (单选题) 在观察者模式中,表述错误的是( )。
A、观察者角色的更新是被动的
B、被观察者可以通知观察者进行更新
C、观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态进行
D、以上表述全部错误
答案:C
12. (单选题) 以下意图( )可用来描述观察者(Observer)。
A、将抽象部分与它的实现部分分离,使它们都可以独立变化
B、定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
C、用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象
D、使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系
答案:B
13. (单选题) 关于模式适用性,以下( )不适合使用观察者(Observer)模式。
A、当一个抽象模式有两个方面,其中一个方面依赖于另一方面。将这二者封面在独立的对象中以使它们可以各自独立地改变和复用
B、当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变
C、当一个对象必须通知其他对象,而它又不能假定其他对象是谁。换言之,用户不希望这些对象是紧密耦合的
D、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责
答案:D
14. (单选题) 在观察者模式中,表述错误的是( )。
A、观察者角色的更新是被动的
B、被观察者可以通知观察者进行更新
C、观察者可以改变被观察者的状态,再由被观察者通知所有观察者的状态进行
D、以上表述全部错误
答案:C
15. (单选题) 以下关于状态模式的叙述错误的是( )。
A、状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类
B、状态模式中引入了一个抽象类来专门表示对象的状态,而具体的状态都继承了该类,并实现了不同状态的行为,包括各种状态之间的转换
C、状态模式使得状态的变化更加清晰明了,也很容易创建对象的新状态
D、状态模式完全符合开闭原则,增加新的状态类无须对原有类库进行任何修改
答案:D
16. (单选题) 下列( )不是状态模式的实例。
A、银行账户根据余额不同拥有不同的存/取款操作
B、游戏软件中根据虚拟角色级别的不同拥有不同的权限
C、某软件在不同的操作系统中呈现不同的外观
D、会员系统中会员等级不同可以实现不同的行为
答案:C
17. (单选题) 以下意图( )可用来描述状态(State)模式。
A、使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系
B、提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示
C、允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类
D、在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态
答案:C
18. (单选题) 某系统中的某子模块需要为其他模块提供不同数据系统(如Oracle、SQL Server、DB2等) 的功能这些数据库系统提供访问接口有一定的差异,但访问过程却是相同的,例如,先连接数据库,再打开象开数据库,最后对数据进行进行查询,可使用( )模式抽象出相同的据库访问过程。
A、观察者
B、访问者
C、模板方法
D、策略
答案:C
19. (单选题) 以下关于模板方法模式的叙述错误的是( )。
A、模板方法模式定义了一个操作中算法的骨架,而将一些步骤廷迟到子类中
B、模板方法模式是一种对象行为型模式
C、模板方法使得子类不改变一个算法的结构即可重定义该算法的某些特定步骤
D、模板方法不仅可以调用原始的操作,还可以调用定义于AbstractClass中的方法或其他对象中的方法
答案:B
20. (单选题) 关于C#语言中与继承有关的几个关键字,以下叙述有有误的一项是( )。
A、在父类中使用abstract关键字声明的抽象方法必须在非抽象具体子类中提供实现
B、在父类中使用virtual关键字声明的方法在子类中可以使用override关键字实现覆盖
C、在父类中没有使用关键字abstract、virtual或override声明的方法在子类中可以使用override关键字来实现覆盖
D、在父类中使用virtual关键字声明的方法在子类中可以使用new关键字来实现隐藏
答案:C
21. (单选题) 关于模式适用性,以下( )不适合使用模板方法(Template Method)模式。
A、一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现
B、当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变
C、各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码
D、控制子类扩展。模板方法只在特定点调用“hook”操作,这样就只允许在这些点进行扩展
答案:B
二. 判断题(共3题,10.8分)
22. (判断题) 在某电子商务系统中,站内检索功能的基本实现过程为:先搜索商品表查询相关信息,再搜索商品类型表查询相关信息,然后搜索新闻表查询相关信息。该搜索次序可以灵活地调整并且可能会加入新的待查询的数据表。对于该站内检索功能,可采用职责链模式进行设计。
答案:对
23. (判断题) 在某系统中经常需要重复创建些相同或者相似的对象,可以考虑采用模板方法模式。
答案:错
24. (判断题) 采用模板方法模式可以定义一个操作中算法的骨架,而将一些步骤延迟到子类中实现。模板方法模式是一种代码复用技术,可让系统更加符合合成复用原则。
答案:对
三. 填空题(共4题,14.4分)
25. (填空题) 职责链是一种__________行为型模式,它将所有请求的处理连成一条链。
答案:对象
26. (填空题) 职责链模式存在___________和不纯的职责链模式两种情况。
答案:纯的职责链模式
27. (填空题) 状态模式包含___________角色、___________角色和___________角色等主要角色。
答案:环境类 抽象状态类 具体状态类
28. (填空题) 模板方法模式的基本方法是整个算法中的一个步骤,它包含____________、____________和____________等几种类型。
答案:抽象方法 具体方法 钩子方法
评论区