设计模式习题
统一建模语言基础知识
1、在UML提供的图中,( )用于描述系统与外部系统及用户之间的交互;
A、用例图
B、类图
C、对象图
D、部署图
2【单选题】
在UML提供的图中,( )用于按时间顺序描述对象之间的交互。
A、对象图
B、状态图
C、活动图
D、时序图
3【单选题】
以下关于类成员的可见性叙述错误的是( )
A、可见性为public时,类内和类外可以使用
B、可见性为protected时,类内及子类可以使用
C、可见性为private时,类内及类外皆不可以使用
D、可见性为public或protected时,子类皆可以使用
4
【单选题】
对于如图所示的UML类图,正确的描述是( )
A、类B的实例中包含了对类C的实例的引用
B、类A的实例中包含了对类B的实例的引用
C、类A的实例中包含了对类C的实例的引用
D、类B的实例中包含了对类A的实例的引用
5【单选题】
UML中关联的多重度是指( )
A、一个类有多少个方法被另一个类调用
B、一个类的实例能够与另一个类的多少个实例相关联
C、一个类的某个方法被另一个类调用的次数
D、两个类所具有的相同的方法和属性
我的答案:B
6【单选题】( )表示了对象间is-a的关系。
A、组合
B、引用
C、聚合
D、继承
我的答案:D
7【单选题】
当采用标准UML构建系统类模型(Class Model)时,若类B除具有类A的全部特性外,类B还可以定义新的特性以及置换类A的部分特性,那么类B与类A具有( )关系;
A、聚合
B、泛化
C、传递
D、迭代
我的答案:B
8【单选题】
若类A的对象维持类B对象的引用或指针,并可与类C的对象共享相同的类B的对象,那么类A与类B具有( )关系。
A、聚合
B、泛化
C、传递
D、迭代
我的答案:A
9【单选题】
在UML类图中,( )关系表明类之间的相关联系最强。
A、聚合
B、组合
C、继承
D、关联
我的答案:C
10【单选题】uml中规定类的受保护的属性的可见性用符号( )表示。
A、+
B、-
C、#
D、*
我的答案:C
面向对象的设计原则
1【单选题】
关于单一职责原则,以下说法错误的是( )。
A、一个类只负责一个功能领域中的相应职责。
B、就一个类而言,应该有且仅有一个引起它变化的原因。
C、一个类承担的职责越多,越容易复用,被复用的可能性越大。
D、一个类承担的额职责过多时需要将职责分离,将不同的职责封装在不同的类
我的答案:C
2【单选题】
实现开闭原则的关键在于( )。
A、分离类的职责
B、对系统进行抽象化
C、一个类尽可能少地与其他类发生相互作用
D、多用关联关系,少用继承关系
我的答案:B
3. 某系统通过使用配置文件,可以在不修改源代码的情况下更换数据库驱动程序,该系统满足( )。
A、里氏替换原则
B、接口隔离原则
C、单一职责原则
D、开闭原则
我的答案:B 答案是不对的
【单选题】
4. 已知ClassA是ClassB的父类,在ClassC中定义了ClassA类型的对象obj,且提供了方法setClassA(ClassA obj)用于给obj对象赋值,以下叙述错误的是( )。
A、可以在setClassA()方法中传递一个ClassB类型的对象
B、如果在类ClassA中定义了方法method1(),在类ClassB中覆盖了该方法,当setClassA()方法参数传递的是ClassB类型的对象时,在ClassC中调用obj的method1()方法时将执行ClassB的method1()的方法。
C、可以在ClassC中定义一个新的方法setClassA(ClassB obj),他与原有方法setClassA(ClassA obj)构成一组重载方法
D、如果在ClassB中定义了ClassA没有的新方法method2(),当setClassA()方法参数传递的是ClassB类型的对象时,在ClassC中可以调用obj对象的method2()方法。
我的答案:D
【单选题】
5. 下面关于面向对象设计的描述正确的是( )。
A、针对接口编程,而不是针对实现编程
B、针对实现编程,而不是针对接口编程
C、接口与实现不可分割
D、优先使用继承而非组合
我的答案:A
6. 以下关于面向对象设计的叙述中,错误的是( )。
A、高层模块不应该依赖于底层模块
B、抽象不应该依赖于细节
C、细节可以依赖于抽象
D、高层模块无法不依赖于底层模块
7.【单选题】关于继承复用和合成复用,以下叙述错误的是( )。
A、继承复用实现简单,子类可以继承父类的部分方法和属性,并且可以选择性覆盖父类的方法。
B、继承复用会破坏系统的封装性,会将基类的实现细节暴露给子类。
C、合成复用将已有对象纳入新对象中,使之成为新对象的一部分,新对象可以调用已有对象的方法,从而实现行为的复用。
D、合成复用又称为“白箱”复用,与继承复用相比,其耦合度更高,成员对象的变化对容器对象影响更大而且合成复用不能再横线运行时动态实现。
8. 如果一个方法能够接受一个基类对象作为参数,必然可以接受一个子类对象。该陈述是( )的定义。
A、依赖倒转原则
B、里氏替换原则
C、合成复用原则
D、接口隔离原则
9. 关于接口隔离原则,以下叙述错误的是( )。
A、在系统设计时,客户端不应该依赖那些它需要的接口。
B、当一个接口太大时,需要将它分割成一些更细小的接口,使用该接口的客户端类仅需指导与之相关的方法即可。
C、接口应该尽量细化,同时接口中的方法应该尽可能少,理想情况是在每个接口中只定义一个方法,该接口使用起来最为方便。
D、一个接口只代表一个角色,每个角色都有它特定的一个接口
10.在系统设计中应用迪米特法则,以下叙述错误的是( )。
A、在类的划分上,应该尽量创建松耦合的类,类的耦合度越低,复用越容易。
B、如果两个类之间不必彼此通信,那么这两个类就不应当发生直接的相互作用
C、在对其它类的引用上,一个对象对其他对象的引用应当降到最低。
D、在类的设计上,只要有可能,一个类型应该尽量设计成抽象类或接口,且成员变量和成员函数的访问权限最好设置为公开的(public)。
11. 一个软件实体应当尽可能少地与其他软件实体发生相互作用,这样,当一个模块修改时,就会尽量少地影响其他模块,扩展会相对容易。这是( )的定义。
A、迪米特法则
B、接口隔离原则
C、里氏替换原则
D、合成复用原则
【单选题】
12. ( )不是迪米特法则的重构方案实例。
A、为了防止界面组件之间产生复杂的引用关系,提供一个中央控制器来赋值控制界面组件间的相互引用。
B、由于不能直接访问一个远程对象,在本地创建一个远程对象的代理,通过代理对象间接访问远程对象。
C、为了降低多层系统的耦合性,提高类的可扩展性和复用性,在界面表示层和业务逻辑层之间增加控制层,由控制层来转发表示层对业务逻辑层的调用。
D、为了提高可扩展性,在系统中增加抽象业务逻辑层,客户类针对抽象业务逻辑层编程,而将具体的业务逻辑类类名存储在配置文件中。
我的答案:B 答案是不对的
1
【多选题】
6. 面向对象分析与设计中( )是指一个模块在扩展性方面应该是开放的,而在更改性方面应该是封闭的;而( )是指子类应当可以替换父类并出现在父类能够出现的任何地方。
A、开闭原则
B、里氏替换原则
C、依赖倒转原则
D、单一职责原则
我的答案:AB
简单工厂模式
1【单选题】
在面向对象软件开发过程中,采用设计模式( )。
A、允许在非面向对象程序设计语言中使用面向对象的概念。
B、依附用成功的设计和体系结构。
C、以减少设计过程创建的实例对象的个数
D、以保证程序的运行速度达到最优值
我的答案:B
2【单选题】
设计模式具有( )的优点。
A、适应需求变化
B、程序易于理解
C、减少开发过程中的代码开发工作量
D、简化软件系统的设计
我的答案:A 答案是不对的
3【单选题】
在进行面向对象设计时,采用设计模式能够( )。
A、复用相似问题的相同解决方案
B、改善带的平台可移植性
C、改善代码的可理解性
D、增强软件的已安装性
我的答案:A
【单选题】
4. 以下关于简单工厂模式的叙述错误的是( )。
A、简单工厂模式可以根据参数的不同返回不同的类的实例
B、简单工厂模式专门定义一个类赋值创建其他类的实例,被创建的实例通常都具有共同的父类
C、简单工厂模式可以减少系统的格式,简化系统的设计,使得系统更易于理解。
D、系统的扩展困难,一旦添加新的产品就不得不修改工厂逻辑,违背开闭原则。
我的答案:C
【单选题】
5. 在简单工厂模式中,如果需要增加新的具体产品,必须修改( )的源代码。
A、抽象产品类
B、其他具体产品类
C、工厂类
D、客户类
我的答案:C
6. 关于Java语言实现简单工厂模式中的静态工厂方法,以下叙述错误的是( )。
A、工厂子类可以继承父类非私有的静态方法
B、工厂子类可以覆盖父类的静态方法
C、工厂子类的静态工厂方法可以在运行时覆盖由工厂父类声明的工厂对象的静态工厂方法
D、静态工厂方法支持重载
我的答案:A 答案是不对的
7. 以下关于工厂方法模式的叙述错误的是( )。
A、在工厂方法模式中引入了抽象工厂类,二具体产品的创建延迟到具体工厂中实现
B、工厂方法模式添加新的产品对象很容易,无需对原有系统进行修改,符合开闭原则
C、工厂方法模式存在的问题是在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,随着类个数的增加,会给系统带来一些额外开销。
D、工厂方法模式是所有形式的工厂模式最为抽象和具有一般性的一种形态,工厂方法模式退化后可以演变成抽象工厂模式
我的答案:D
【单选题】
8. 某银行系统采用工厂模式描述其不同账户之间的关系,设计出的类图如7-2所示。其中与工厂模式的“Creator”介绍相对应的类是( );与“Product”角色相对应的类是(B)
A、Bank
B、Account
C、Checking
D、Savings
9 以下选项中,( )可以作为工厂方法模式的应用实例。
A、曲线图创建器生成曲线器,柱状图创建器生成柱状图。
B、通过复制已有邮件对象创建新的邮件对象
C、在网络上传输大图片时,先传输对应的文字描述,再传输真实的图片
D、在多个界面组件类之间添加一个控制类来协调它们之间的相互调用关系。
我的答案:A
A、Abstract Factory
B、Factory Method
C、Command
D、Chain of Responsibility
我的答案:B
【单选题】
11 以下代码使用了( )模式。
public abstract class ExchangeMethod{
public abstract void process();
}
public class DigitalCurrency extends ExchangeMethod{
public void process() {……}
}
public class CreditCard extends ExchangeMethod{
public void process() {……}
}
public class Factory{
public static ExchangeMethod createProduct(String type){
switch(type){
case “DigitalCurrency”:
return new DigitalCurrency(); break;
case “CreditCard”:
return new CreditCard(); break;
}
}
}
A、Simple Factory
B、Factory Method
C、Abstract Factory
D、未使用任何设计模式
我的答案:A
抽象工厂模式
【单选题】
1 不同品牌的手机应该有不同的公司制造,三星公司生产三星手机,苹果公司生产苹果手机。该场景蕴含了( )设计模式。
A、Simple Factory
B、Factory Method
C、Abstract Factory
D、Builder
我的答案:C 答案是不对的
2. 以下关于抽象工厂模式的叙述错误的是( )。
A、抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
B、当系统中有多于一个产品族时可以考虑使用简单工厂模式
C、当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、有效率
D、抽象工厂模式符合开闭原则,增加新的产品族和新的产品等级结构都很方便
我的答案:D
3. 关于简单工厂模式,工厂方法模式和抽象工厂模式的比较,以下叙述有误的一项是( )。
A、简单工厂模式和工厂方法模式对应一个产品等级结构,而抽象工厂模式对应多个产品等级结构
B、3种工厂模式都隔离了产品的创建和使用,客户端类只需要使用产品,而将产品的创建过程交由工厂类来完成
C、3种工厂模式都提供了抽象产品角色,在工厂方法模式和抽象工厂模式张红还提供了抽象工厂角色,但简单工厂模式未提供抽象工厂类
D、在增加新的产品时,简单工厂模式违背了开闭原则,工厂方法模式和抽象工厂模式均很好地符合开闭原则
我的答案:D
【单选题】
4 关于抽象工厂模式中产品族和产品等级结构,叙述错误的是( )。
A、产品等级结构是从不同的产品族中任意选取产品组成的层次结构
B、产品族是指位于不同产品等级的结构、功能先关的产品组成的家族
C、抽象工厂是指一个工程等级结构可以创建出分属于不同产品等级结构的一个产品族的所有对象
D、工厂方法模式对应唯一一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构
我的答案:A
5. 关于工厂模式的叙述错误的是( )。
A、工厂模式隔离产品的创建和使用
B、在工厂类中封装产品对象的创建细节,客户类无须关心这些细节
C、工厂方法模式中的方法可以改为静态方法
D、工厂方法模式中抽象工厂声明的工厂方法返回抽象产品类型,不能返回具体产品类型
我的答案:C
【单选题】
6. 某公司要开发一个图标显示系统,在该系统中,曲线图生成器可以创建曲线图、曲线图图例和曲线图数据标签,柱状图生成器可以创建柱状图、柱状图图例和柱状图数据标签。用户要求可以很方便地增加新的类型的图形,系统需要具备较好的可扩展能。针对这种需求,公司采用( )最为恰当。
A、桥接模式
B、适配器模式
C、策略模式
D、抽象工厂模式
我的答案:D
单例模式
- 在( )时可以使用单例模式。
A、隔离菜单项对象的创建和使用
B、防止一个资源管理器窗口被实例化多次
C、使用一个已有的查找算法而不想修改既有代码
D、不能创建子类,需要扩展一个数据过滤类
我的答案:B
【单选题】
2 以下关于单例模式的描述正确的是( )。
A、它描述了只有一个方法的类的集合
B、它能够保证一个类只产生一个唯一的实例
C、它描述了只有一个属性的类的集合
D、它能够保证一个类的方法只能被一个唯一的类调用
我的答案:B
【单选题】
3( )限制了创建类的实例数量。
A、原型模式
B、建造者模式
C、策略模式
D、单例模式
我的答案:D
4 以下选项中,( )不是单例模式的要点。
A、某个类只能有一个实例
B、单例类不能被继承
C、必须自行创建单个实例
D、必须自行向整个系统提供单个实例
我的答案:B
【单选题】
5 某软件公司开发了一组加密类,在使用这些加密类时要采用简单工厂模式进行设计,为了减少类的个数,将工厂类和抽象加密类合并,基本UML类图如图7-3所示。以下陈述错误的是()
A、在类图中,Cipher类既充当抽象产品类,又充当工厂类
B、工厂方法createCipher()的返回类型为Cipher
C、工厂方法createCipher()应定义为静态方法
D、Cipher类中encrypt()方法必须为抽象方法
答案错误
【单选题】
6 ( )设计模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
A、Adapter(适配器)
B、Singleton(单例)
C、Abstract Factory(抽象工厂)
D、Template Method(模板方法)
我的答案:C
7( )设计模式将负责对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。
A、Builder(建造者)
B、Factory Method(工厂方法)
C、Prototype(原型)
D、Façade(外观)
我的答案:A
适配器模式与桥接模式
1【单选题】
当想使用一个已经存在的类,但其接口不符合需求时,可以采用( )设计模式将该类的接口转换成我们希望的接口。
A、命令 (Command)
B、适配器 (Adapter)
C、装饰 (Decorator)
D、享元 (Flyweight)
我的答案:B
2【单选题】
以下关于适配器模式的叙述错误的是( )。
A、适配器模式将一个接口转换成客户希望的另一个接口,使得原本接口不兼容的那些类可以一起工作
B、在类适配器中,Adapter和Adaptee是继承关系,而在对象适配器中,Adapter和Adaptee是关联关系
C、类适配器比对象适配器更加灵活,在Java、C#等语言中可以通过类适配器一次适配多个适配者类
D、适配器可以在不修改原来的适配者接口Adaptee的情况下将一个类的接口和另一个类的接口匹配起来
我的答案:C
3【单选题】
现需要开发一个文件转换软件,将文件由一种格式转换为另一种格式,如将XML文件转换为PDF文件,将DOC文件转换为TXT文件,有些文件格式转换代码已经存在,为了将已有的代码应用于新软件,而不需要修改软件的整体结构,可以使用( )设计模式进行系统设计。
A、适配器 (Adapter)
B、组合 (Composite)
C、外观 (Facade)
D、桥接 (Bridge)
我的答案:A
4【单选题】
在对象适配器中,适配器类(Adapter)和适配者类(Adaptee)之间的关系为( )。
A关联关系
B、依赖关系
C 继承关系
D、实现关系
我的答案:A
5【单选题】
( )是适配器模式的应用实例。
A、操作系统中的树形目录结构
B、Windows中的应用程序快捷方式
C、Java事件处理中的监听器接口
D、JDBC中的数据库驱动程序
我的答案:D
5【单选题】( )是适配器模式的应用实例。
A、操作系统中的树形目录结构
B、Windows中的应用程序快捷方式
C、Java事件处理中的监听器接口
D、JDBC中的数据库驱动程序
我的答案:D
7【单选题】
以下关于桥接模式的叙述错误的是( )。
A、桥接模式的用意是将抽象化与实现化脱耦,使得两者可以独立地变化
B、桥接模式将继承关系转换成关联关系,从而降低系统的耦合度
C、桥接模式可以动态地给一个对象增加功能,这些功能也可以动态地撤销
D、桥接模式可以从接口中分离实现功能,使得设计更具扩展性
我的答案:C
8【单选题】( )不是桥接模式所适用的场景。
A、一个可以跨平台并支持多种格式的文件编辑器
B、一个支持多数据源的报表生成工具,可以以不同图形方式显示报表信息
C、一个可动态选择排序算法的数据操作工具
D、一个支持多种编程语言的跨平台开发工具
我的答案:C
组合模式和装饰模式
1【单选题】
以下关于组合模式的叙述错误的是( )。
A、组合模式对叶子对象和组合对象的使用具有一致性
B、组合模式可以通过类型系统来对容器中的构件实施约束,可以很方便地保证在一个容器中只能有某些特定的构件
C、组合模式将对象组织到树形结构中,可以用来描述整体与部分的关系
D、组合模式使得可以很方便地在组合体中加入新的对象构件,客户端不需要因为加入新的对象构件而更改代码
我的答案:B
2下图是( )模式的结构图。
A 模板方法
B、命令
C、单例
D、组合
我的答案:D
3【单选题】现需要开发一个XML文档处理软件,可以根据关键字查询指定内容,用户可以在XML中任意选取某一节点为查询的初始节点,无须关心该节点所处的层次结构。针对该需求,可以使用( )模式来进行设计。
A、Abstract Factory(抽象工厂)
B、Flyweight(享元)
C、Composite(组合)
D、Strategy(策略)
我的答案:C
4【单选题】
某公司欲开发一个图形控件库,要求可以在该图形控件库中方便地增加新的控件,而且可以动态地改变控件的外观或给控件增加新的行为,如可以为控件增加复杂的立体边框、增加控件的鼠标拖拽行为等。针对上述需求,使用( )模式来进行设计最合适。
A、适配器 (Adapter)
B、装饰 (Decorator)
C、外观 (Facade)
D、命令 (Command)
我的答案:B
5【单选题】
以下( )不是装饰模式的适用条件。
A、要扩展一个类的功能或给一个类增加附加责任
B、要动态地给一个对象增加功能,这些功能还可以动态撤销
C、要动态组合多于一个的抽象化角色和实现化角色
D、要通过一些基本功能的组合而产生复杂功能,而不使用继承关系
我的答案:C
6【单选题】Java IO库的设计使用了装饰模式,局部类图如下所示,在该类图中,类( )充当具体构件ConcreteComponent。
A、OutputStream
B、FileOutputStream
C、FilterOutputStream
D、BufferedOutputStream
我的答案:B
7【单选题】
下图是( )模式的类图。
A、桥接 (Bridge)
B、工厂方法 (Factory Method)
C、模板方法 (Template Method)
D、外观 (Facade)
我的答案:D
2【单选题】以下关于外观模式的叙述错误的是( )。
A、外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的外观对象进行
B、在增加外观对象之后,客户类只需要直接和外观对象交互即可,子系统类间的复杂关系由外观类来实现,降低了系统的耦合度
C 外观模式可以很好地限制客户使用子系统类,对客户访问子系统类做限制可以提高系统的灵活性
D、如果一个系统有好几个子系统的话,可以提供多个外观类
我的答案:C
3【单选题】
毕业生通过职业介绍所找工作,该过程蕴含了( )模式。
A、外观(Facade)
B、命令(Command)
C、代理(Proxy)
D、桥接(Bridge)
我的答案:C
4【单选题】
代理模式有多种类型,其中智能引用代理是指( )。
A、为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果
B、保护目标不让恶意用户接近
C、使几个用户能够同时使用一个对象而没有冲突
D、当一个对象被引用时,提供一些额外的操作,如将此对象被调用的次数记录下来
我的答案:D
5【单选题】以下关于代理模式的叙述错误的是( )。
A、代理模式能够协调调用者和被调用者,从而在一定程序上降低系统的耦合度
B、控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限时可以考虑使用远程代理
C、代理模式的缺点是请求的处理速度会变慢,并且实现代理模式需要额外的工作
D、代理模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用
我的答案:B
命令模式
1【单选题】
以下关于命令模式的叙述错误的是( )。
A、命令模式将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化
B、命令模式可以将请求发送者和请求接收者解耦
C、使用命令模式会导致某些系统有过多的具体命令类,导致在有些系统中命令模式变得不切实际
D、命令模式是对命令的封装,命令模式把发出命令的责任和执行命令的责任集中在同一个类中,委派给统一的类来进行处理
我的答案:D
2【单选题】在( )时无须使用命令模式。
A、实现撤销(Undo)操作和恢复(Redo)操作
B、将请求的发送者和接收者解耦
C、不改变聚合类的前提下定义作用于聚合中元素的新操作
D、不同的时间指定请求,并将请求排队
我的答案:C
1【多选题】某计算器使用命令模式设计,其类图如下所示,在该类图中,( ① )充当请求调用者,( ② )充当请求接收者。
A、Calculator
B、Command
C、AddCommand
D、AddOperator
我的答案:AD
迭代器模式,观察者模式,状态模式
1【单选题】以下关于迭代器模式的叙述错误的是( )。
A、迭代器模式提供一种方法来访问聚合对象,而无须暴露这个对象的内部表示
B、迭代器模式支持以不同的方式遍历一个聚合对象
C、迭代器模式定义了一个访问聚合元素的接口,并且可以跟踪当前遍历的元素,了解哪些元素已经遍历过而哪些没有
D、在抽象聚合类中定义了访问和遍历元素的方法并在具体聚合类中实现这些方法
我的答案:A 答案不对
2【单选题】迭代器模式用于处理具有( )性质的类。
A、抽象
B、聚集
C、单例
D、共享
我的答案:B
3【单选题】
分析如下代码:
public class TestXYZ {
int behaviour;//Getter and Setter......public void handleAll(){if(behaviour == 0){ //do something }else if(behaviour == 1){ //do something }else if(behaviour == 2){ //do something }else if(behaviour == 3){ //do something }... some more else if ...}
}
为了提高代码的扩展性和健壮性,可以使用( )设计模式来进行重构。
A、Visitor(访问者)
B、Facade(外观)
C、Memento(备忘录)
D、State(状态)
我的答案:D
4【单选题】( )设计模式定义了对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
A、Adapter(适配器)
B、Iterator(迭代器)
C、Prototype(原型)
D、Observer(观察者)
我的答案:D
5【单选题】下列UML类图表示的是( )设计模式,在该设计模式中,( )。
A、备忘录 (Memento)
B、策略 (Strategy)
C、状态 (State)
D、观察者 (Observer)
我的答案:D
6【单选题】
在下图所示的设计模式中,( )。
A、一个Subject对象可对应多个Observer对象
B、Subject只能有一个ConcreteSubject子类
C、Observer只能有一个ConcreteObserver子类
D、一个Subject对象必须至少对应一个Observer对象
我的答案:A
7【单选题】
下面这句话隐含着( )设计模式。
我和妹妹跟妈妈说:“妈妈,我和妹妹在院子里玩。饭做好了叫我们一声。”
A、Facade
B、Chain of Responsibility
C、Observer
D、Iterator
我的答案:C
8【单选题】( ① )设计模式允许一个对象在其内部状态改变时改变它的行为。下图为这种设计模式的类图,已知类State为抽象类,则类( ② )的实例代表了Context对象的状态。
A、单例 (Singleton)
B、桥接 (Bridge)
C、组合 (Composite)
D、状态 (State)
我的答案:D
9【单选题】下图所示设计模式中,则类( )的实例代表了Context对象的状态。
A、Context
B、ConcreteStateA
C、Handle
D、State
我的答案:B
10【单选题】场景( )不是状态模式的实例。
A、银行账户根据余额不同拥有不同的存取款操作
B、游戏软件中根据虚拟角色级别的不同拥有不同的权限
C、某软件在不同的操作系统中呈现不同的外观
D、会员系统中会员等级不同可以实现不同的行为
我的答案:C
11【单选题】以下关于状态模式叙述错误的是( )。
A、状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类
B、状态模式中引入了一个抽象类来专门表示对象的状态,而具体的状态都继承了该类,并实现了不同状态的行为,包括各种状态之间的转换
C、状态模式使得状态的变化更加清晰明了,也很容易创建对象的新状态
D、状态模式完全符合开闭原则,增加新的状态类无须对原有类库进行任何修改
我的答案:D
策略模式
1【单选题】以下关于策略模式叙述错误的是( )。
A、策略模式是对算法的包装,是把算法的责任和算法本身分隔开,委派给不同的对象管理
B、在Context类中,维护了对各个ConcreteStrategy的引用实例,提供了一个接口供ConcreteStrategy存储数据
C、策略模式让算法独立于使用它的客户而变化
D、策略模式中,定义一系列算法,并将每一个算法封装起来,并让它们可以相互替换
我的答案:B
2【单选题】以下关于策略模式的优缺点描述错误的是( )。
A、策略模式中,客户端无须知道所有的策略类,系统必须自行提供一个策略类
B、策略模式可以避免使用多重条件转移语句
C、策略模式会导致产生大量的策略类
D、策略模式提供了管理相关算法族的办法
我的答案:A
3【单选题】某系统中用户可自行动态选择某种排序算法之一(如选择排序、冒泡排序、插入排序)来实现某功能,该系统的设计可以使用( )设计模式。
A、状态
B、策略
C、模板方法
D、工厂方法
我的答案:B
4【单选题】某系统中的某子模块需要为其他模块提供访问不同数据库系统(Oracle、SQL Server、DB2 UDB 等)的功能,这些数据库系统提供的访问接口有一定的差异,但访问过程却都是相同的,例如,先连接数据库,再打开数据库,最后对数据进行查询,可使用( )设计模式抽象出相同的数据库访问过程。
A、观察者
B、访问者
C、模板方法
D、策略
我的答案:C
5【单选题】以下关于模板方法模式的叙述错误的是( )。
A、模板方法模式定义了一个操作中算法的骨架,而将一些步骤延迟到子类中
B、模板方法模式是一种对象行为型模式
C、模板方法使得子类可以不改变一个算法的结构即可重定义该算法某些特定步骤
D、模板方法不仅可以调用原始的操作,还可以调用定义于AbstractClass中的方法
我的答案:B
6【单选题】在很多流行的交互式绘图程序中,当用户选择不同的绘图工具时图形编辑器的行为将随当前工具的变化而改变。如当一个“绘制椭圆”工具被激活时,可以创建椭圆对象;当一个“选择”工具被激活时,可以选择图形对象;当一个“填充”工具被激活时,可以给图形填充颜色等。在该程序中,可以使用( )设计模式来根据当前的工具来改变编辑器的行为。
A、工厂方法 (Factory Method)
B、状态 (State)
C、备忘录 (Memento)
D、访问者 (Visitor)
我的答案:A 答案错误