设计模式复习题Word格式.docx
《设计模式复习题Word格式.docx》由会员分享,可在线阅读,更多相关《设计模式复习题Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
9.每一个设计模式都集中于一个特定的(设计问题),描述了(相互通信的对象)或者(类)以及(解决方案)和(解决效果)。
10.设计模式中应优先使用(对象组合)而不是(类继承)。
11.面向对象(OO)的基础包括(抽象)(封装)(多态)(继承)。
12.(状态模式)允许一个对象基于内部状态而拥有不同的行为。
13.模式不是代码,而是(针对设计问题)的通用解决方案。
14.观察者模式定义了对象之间(一对多)的关系。
15.观察者和可观察者之间用(松耦合方式)结合。
16.设计模式的两大主题是:
(对象组合)和(类继承)的讨论。
17.(组合)和(委托)可用于运行时动态地加上新的行为。
18.工厂方法使用(继承)把对象的创建委托给子类,子类实现了工厂方法来创建对象。
19.抽象工厂方法使用(对象组合)使对象的创建被实现在工厂接口所暴露出来的方法中。
20.在Java中实现单件模式,需要私有的(构造器)(一个静态方法)和(一个静态变量)
21.命令模式将(发出请求)的对象和(执行请求)的对象解耦。
22.当需要一个现有的类而其接口不符合需求时,可使用(适配器)模式。
23.适配器模式的两种模式是(对象适配器)和(类适配器)。
24.(模板方法)定义了算法的步骤,把这些步骤的实现延迟到了子类。
25.(代理模式)为另一个对象提供代表,以便控制客户对对象的访问。
26.装饰着模式为对象加上(行为)而代理模式则是(控制访问)。
27.开闭原则:
(扩展开放)(修改关闭)。
28.代理模式分为哪4种:
(虚拟代理)(远程代理)(安全代理)(聪明引用)。
选择题
1.设计模式具有的优点。
(A)
A.适应需求变化B.程序易于理解
C.减少开发过程中的代码开发工作量D.简化软件系统的设计
2.若系统中的某子模块需要为其它模块提供访问不同数据库系统(Oracle、SQLServer、DB2UDB等)的功能,这些数据库系统提供的访问接口有一定的差异,但访问过程却都是相同的,例如,先连接数据库,再打开数据库,最后对数据进行查询,(D)设计模式可抽象出相同的数据库访问过程;
A.外观B.装饰C.单件D.模板方法
3.系统中的文本显示类(TextView)和图片显示类(PictureView)都继承了组件类(Component),分别显示文本和图片内容,现需要构造带有滚动条、或者带有黑色边框、或者既有滚动条又有黑色边框的文本显示控件和图片显示控件,但希望最多只增加三个类,
(B)设计模式可以实现该目的。
A.外观B.装饰C.单件D.模板方法
4.下面的类图表示的是哪个模式?
(A)
A、抽象工厂模式(AbstractFactory)
B、工厂方法模式(FactoryMethod)
C、命令模式(Command)
D、责任链模式(ChainofResponsibility)
5.下面的类图表示的是哪个设计模式?
(B)
A、代理模式(Proxy)B、装饰模式(Decorator)
C、桥接模式(Bridge)D、观察者模式(Observer)
6.下面的类图表示的是哪个模式?
A、代理模式(Proxy)B、外观模式(Facade)
C、适配器模式(Adapter)D、桥接模式(Bridge)
7.下面的类图表明了哪个模式?
(D)
A、责任链模式(ChainofResponsibility)B、命令模式(Command)
C、备忘录模式(Memento)D、工厂方法模式(FactoryMethod)
8.下面的类图表示的是哪个设计模式?
A、模板方法模式(TemplateMethod)B、命令模式(Command)
C、单例模式(Singleton)D、状态模式(State)
9.下面的类图表示的是哪个设计模式?
(C)
10.当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用(A)模式。
A.创建型B.结构型C行为型D.以上都可以
11、设计模式的两大主题是(d)
A.系统的维护与开发B对象组合与类的继承
C.系统架构与系统开发D.系统复用与系统扩展
12、单例模式中,两个基本要点(ab)和单子类自己提供单例
A.构造函数私有B.唯一实例
C.静态工厂方法D.以上都不对
13、下列模式中,属于行为模式的是(b)
A.工厂模式B观察者C适配器以上都是
14、对象适配器模式是(a)原则的典型应用。
A.合成聚合复用原则B.里式代换原则
C.依赖倒转原则D.迪米特法则
15、静态工厂的核心角色是(a)
A.抽象产品B.具体产品C.静态工厂D.消费者
16、在观察者模式中,表述错误的是(c)
A.观察者角色的更新是被动的。
B.被观察者可以通知观察者进行更新
C.观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态进行。
D.以上表述全部错误。
17、以下关于创建型模式说法正确的是。
(A)
A.创建型模式关注的是对象的创建
B.创建型模式关注的是功能的实现
C.创建型模式关注的是组织类和对象的常用方法
D.创建型模式关注的是对象间的协作
18.常用的描述设计模式的格式有(ABCD)。
A.意图B.动机
C.适用性D.结构
19.以下关于结构型模式说法正确的是(ACD)。
A.结构型模式可以在不破坏类封装性的基础上,实现新的功能。
B.结构型模式主要用于创建一组对象。
C.结构型模式可以创建一组类的统一访问接口
D.结构型模式可以在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。
20.以下属于结构型模式的是(AB)。
A.代理(Proxy)模式B.合成(Composite)模式
C.命令(Command)模式D.观察者(Observer)模式
21.在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。
主要体现在(AD)。
A.适配器(Adapte)模式B.合成(Composite)模式
C.原型(Prototype)模式D.桥接(Bridge)模式
22.结构型模式中最体现扩展性的几种模式是(BC)。
C.装饰(Decorator)模式D.桥接(Bridge)模式
23.行为类模式使用(B)在类间分派行为。
A.接口B.继承机制
C.对象组合D.委托
24.以下属于行为对象模式的是(BCD)。
A.模板(TemplateMethod)模式B.迭代器(Iterator)模式
25.封装分布于多个类之间的行为的模式是(C)。
A.观察者(Observer)模式B.迭代器(Iterator)模式
C.访问者(Visitor)模式D.策略(Strategy)模式
26.利用继承来提供DUCK的行为,会导致下列那些缺点?
(ABCD)
A.代码在多个子类中重复B.运行时的行为不容易改变
C.我们不能让鸭子跳舞D.改变会牵一发而动全身,造成其他鸭子不想要的改变
简答题:
1.什么是设计模式?
设计模式的目标是什么?
答:
设计模式通常是对于某一类的软件设计问题的可重用的解决方案,将设计模式引入软件设计和开发过程,其目的就在于要充分利用已有的软件开发经验。
2.设计模式具有哪三大特点?
(1)在特定的场景下有可重用性,对相同类型不同问题的环境,其解决方案都有效。
(2)可传授性,即问题出现的机会很多,解决问题的方案相同,人们相对可以接受。
(3)有表示模式的名称。
3.GOF设计模式常用的有几种?
GOF设计模式按照模式的目的可
分为哪三类?
行为型,结构型,创建型
4.画出抽象工厂方法类图(这类题自己看书去。
)
5.针对接口编程,不针对实现编程的意义。
主题与观察者都是用接口:
观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。
这样可以让两者之间运作正常,又同时具有松耦合的优点。
6.面向对象(OO)的原则有:
1.封装变化
2.多用组合,少用继承
3.针对接口编程,不针对实现编程
4.为交互对象之间的松耦合设计而努力
5.对扩展开放,对修改关闭
6.依赖抽象,不要依赖具体类
7.只和朋友交谈
8.别找我,我会找你
9.类应该只有一个改变的理由
7.耦合分为几种?
(1)内容耦合
(2)公共耦合(3)外部耦合(4)控制耦合
(5)标记耦合(6)数据耦合(7)非直接耦合
8.GOF模式分为几种,每种包含哪些模式?
分为3种。
创建型设计模式:
简单工厂模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,单例模式;
结构型设计模式:
适配器模式,桥接模式,组合模式,装饰模式,外观模式,轻量级模式,代理模式;
行为性设计模式:
责任链模式,命令模式,解释器模式,迭代器模式,中介者模式,备忘录模式,观察者模式,状态模式,策略者模式,模板方法模式,访问者模式。
综合题
1.某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实
世界中各种鸭子的发声特征、飞行特征和外观特征。
游戏需要模拟的鸭子
种类及其特征如下表所示:
为支持将来能够模拟更多种类鸭子的特征,采用某设计模式设计的类图如下所示:
其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;
类FlyBehavior与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声行为;
类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;
类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。
[C++代码]
#include<
iostream>
usingnamespacestd;
classFlyBehavior{
public:
virtualvoidfly()=0;
};
classQuackBehavior{
public:
virtualvoidquack()=0;
classFlyWithWings:
publicFlyBehavior{
voidfly(){cout<
<
"
使用翅膀飞行!
"
<
endl;
}
classFlyNoWay:
不能飞行!
classQuack:
publicQuackBehavior{
voidquack(){cout<
发出\'
嘎嘎\'
声!
}
classSqueak:
发出空气与橡皮摩擦声!
classQuackNoWay:
voidquack(){cout<
不能发声!
classDuck{
protected:
FlyBehavior*flyBehavior;
QuackBehavior*quackBehavior;
voidfly(){flyBehavior->
fly();
voidquack(){quackBehavior->
quack();
};
virtualvoiddisplay()=0;
classRubberDuck:
publicDuck{
RubberDuck(){
flyBehavior=newFlyNoWay();
quackBehavior=newSqueak();
~RubberDuck(){
if(!
flyBehavior)deleteflyBehavior;
quackBehavior)deletequackBehavior;
voiddisplay(){/*此处省略显示橡皮鸭的代码*/}
//其它代码省略
请根据上述类图和代码,阐述采用该设计模式进行设计的优势?
18.写一个单例模式的程序:
staticInstanceist=null;
publicstaticSingletongetInstance()
{
if(instance==null)
synchoronized(Singleton.class){
if
(instance==null)
instance=newSingleton();
returninstance;
19.写一个观察者模式的程序:
publicinterfaceAlarmListener{//定义观察者接口
publicvoidalarm();
publicvoidsoundTheAlarm(){
System.out.println(
“传感器检测到有人入侵”)
classLightingimplementsAlarmListener{
publicvoidalarm(){
System.out.println(“自动开灯”);
classGatesimplemets
AlarmListener{
System.out.println(“自动关门”);