软件设计模式选择、判断解析-2

目录

一.单选题

1.下面两个情景分别体现了什么设计模式

解析:(1)典型桥接模式(华为手机可适配不同品牌的 SD 卡,SD 卡也可插入其他品牌手机) (2)表面上是桥接,实际上加购商品是增加了购买的价格,不是真的把卡插到手机里边,价格的增加,由用户动态透明地增加,可以多次增加(装饰),这正是装饰模式的特点 

2.将一桶酒装到酒瓶中,由于酒瓶瓶口比较小,直接将酒倒入酒瓶容易撒漏浪费,于是在酒瓶瓶口上放一个漏斗,通过漏斗就很好地解决了问题,这个情景说明

解析:漏斗是 大口转小口的适配器,显然体现的是适配器模式

3.一个可以装东西的瓶子,装水就是水瓶,装酒就是酒瓶,装油就是油瓶,这体现了

解析:这个瓶子装东西和上面的手机是一个道理,因此可得桥接模式

4.刚出笼的包子直接手拿会很烫,在包子外面包一层纸之后就可以拿了,这说明

解析:从实用的角度,肯定是适配器模式,其他的都不适用

5.目前的笔记本要把屏幕画面通过投影仪显示的话,通常由于笔记本视频输出接口与投影仪连接线不一致而需要使用转接头,对于上述情景描述,下面说法错误的是

解析:适配者是投影仪上的连接线转接头,不是投影仪,投影仪的说法是不准确的。

6.壁柜上的东西太高了够不着,壁柜旁搭个漂亮的简易梯子就拿到了,这情景说明了

解析:由题干易得,该场景中梯子体现出的最恰当的作用就是适配器,解决了高度不一致的兼容器问题,其他选项都不太适合。

7.眼睛视力不好,戴一副眼镜后能看清楚东西了,这说明

解析:眼镜的作用就是在不改变眼睛(目标)和景物(适配者)的前提下,矫正眼睛聚焦问题,起到转换的作用,体现的正是适配器模式特征

8.我有一个易碎的玻璃瓶要快递哥给我寄到远方朋友那里,为了货物安全,我要求快递哥对货物进行多次包装。这个情景中,下面的说法正确的是

解析:抽象的装饰者继承了抽象的构件,使得装饰者与构件类型一致,于是乎可以多次装饰。

9.有一天,我收到快递员送来的匿名包裹,打开层层包装纸,发现里边是一个美味的蛋糕。这段话说明

解析:两种模式的体现。装饰模式类图中 抽象构件与抽象装饰者的两个关系的作用的深刻理解是此题解决的关键

10.小明用天平称盐的质量,在天平的左边放了一堆盐,然后在天平右边放了一个5克砝码,再放了一个1克砝码,这时候天平两边平衡了。这个情景说明

解析:天平就是来称东西的,你要算出盐的质量就必须加砝码

11.茶里加奶变奶茶,茶里加油变油茶,这说明

解析:茶是构件,奶和油都是装饰者,可以单独加,也可以组合加。因此体现装饰模式

12.近期小明学习下滑却害怕跟家长说,于是老师今天家访,与家长沟通了近期小明学习下滑的情况,这情景说明

解析:本质上是小明需要老师帮助说明自身情况

13.某人才招聘网站要求第三方软件公司开发一个通用的实现权限管理和统计网站访问量的程序,以便于能在不修改人才招聘网站的前提下,通过该程序来实现相应功能。此情景体现了

解析:智能引用代理的作用是在访问真实对象时,执行一些额外的操作,比如记录访问次数、计算引用计数、延迟加载等;而权限自然就是涉及到安全

14.小丽刚生下孩子,急需人照顾,于是请了月嫂来照顾她。这说明

解析:本身是月嫂代替原本家人的照顾

15.在表彰会上,小明要代表A班去领奖,可小明有事走不开,于是临时找了一个同学帮他去领奖,这情景体现了

解析:首先要排除AB,因为不涉及到智能引用(毕竟那个同学不需要在领完奖之后单独再给小明汇报一下现场有多少人)。“代表”体现了 虚拟代理 ,“走不开 ,让人家去”体现了 远程代理

16.在( )时无须使用命令模式

解析:访问者可在不修改聚合类的前提下,定义作用于元素的新操作。命令模式不涉及聚合操作的扩展。

17.以下关于命令模式的叙述错误的是(  )

解析:命令模式将命令发送者与命令执行者解耦,而不是集合在同一个类

18.关于观察者模式,表述错误的是(  )

解析:观察目标改变并不依赖于观察者,就算观察目标不知道有多少个观察者,也只是“遗漏”通知观察者改变状态,对整个系统运作并不产生实质影响

19.观察者模式适用于( )

解析:A是桥接,C是装饰器,D是访问者

20.对行为型模式说法正确的是

解析:行为型模式主要用于描述类或对象如何交互和怎样分配职责

21.命令模式、代理模式、工厂模式、装饰模式、观察者模式 这5个模式中,属于行为型模式的有几个?

解析:命令模式是行为型模式,代理模式也是;工厂模式是创建型,装饰和观察者是行为型模式

22.下列哪一个描述的是命令模式

解析:B是观察者;C是责任链模式;D是状态模式

23.下面哪种描述最符合观察者模式

解析:和前面一样

24.命令模式的本质是对请求进行封装,一个“请求”对应于一个“命令”,将发出命令的责任和执行命令的责任分开。在这句话中,打引号处的两个词“请求”和“命令”的说法正确的是

解析:“请求”是抽象命令,“命令”是具体命令

25.以下角色属于命令模式的是

解析:BCD均不是;命令模式包含以下4个角色:Command(抽象命令类)ConcreteCommand(具体命令类)Invoker(调用者)Receiver(接收者)

26.关于命令模式的通用类图的说法错误的是

解析:某一个抽象命令由某一个具体命令实现。一对一

27.观察者模式与下面哪种模式的作用比较类似

解析:事务(Transaction)模式——命令模式

包装器(Wrapper)模式——适配器模式

接口(Interface)模式——桥接模式

模型-视图(Model/View)模式——观察者模式

28.下面哪个角色是属于观察者模式

解析:观察者模式存在:主题、观察者、具体主题、具体观察者

29.下面关于观察者模式通用类图的说法,不正确的是

解析:具体观察者无需一个监控观察者目标发生状态改变的联动方法,为了效率问题,由具体观察目标的通知方法发起联动。

30.下面哪一个不是观察者模式的缺点

解析:使用观察者模式是一(观察目标)对多(观察者)的联动,这是它设计初衷,是特色和优点之一,不是缺点

二.判断题

1.结构型模式(Structural Pattern)关注如何将现有类与类之间、类与对象之间组织在一起形成更加强大的结构

2.对象结构型模式关心类与对象的组合,通过关联关系,在一个类中定义另一个类的实例对象,然后通过该对象调用相应的方法

3.桥接模式模式的定义是将抽象部分和现实部分紧密关联,使得两者可以独立地变化。

解析:抽象部分和实现部分是解耦,不是紧密关联

4.钢笔与蜡笔相比,使用了桥接模式,分离了抽象部分与实现部分,钢笔所使用的墨水就是其抽象部分

解析:和手机是一个类型,但是墨水并非是其抽象部分,反而是实现部分

5.桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,不需要修改原有系统,符合开闭原则

解析:这就是桥接模式的优点

6.对象适配器模式可以把多个不同的适配者适配到同一个目标

解析:你可以让一个屏幕用上不同设备的转接线,就是这种逻辑

7.适配器模式将目标类和适配器类解耦,通过引入一个适配者类来重用现有的目标类,无须修改原有结构,这是适配器模式的优点

解析:并非重用目标类,应该是通过引入适配器类,重用现有的适配者类,并将其接口转换为目标类接口

8.对象结构型的适配器模式可以把多个不同的适配者适配到同一个目标,还可以适配一个适配者的子类

解析:和6一个道理,至于适配子类,也就是向下扩展罢了

9.系统A需要带一个参数的查询方法,系统B能提供带两个参数的查询方法,为了让系统B满足系统A的要求,我们在系统B中增加了带一个参数的查询方法,使得系统A与系统B能兼容,但这是不符合适配器模式的思想的

解析:适配器模式的适用场景可知,适配器就是适用于 目标方与提供方不兼容,且不用修改的场合;这里的目标方其实就是A,提供方是B,你要做的不是修改B,而是对B再做一个接口来组合B或者用一个类继承B来做适配

10.病人需要喝生理盐水,而护士拿出了一瓶水和一瓶盐,这之间不匹配,于是医生另外拿出一个空瓶,将水和盐按照规定比例兑成生理盐水,从而满足了病人的需要。这件事情中可以看出一瓶水和一瓶盐是两个目标,生理盐水是适配者,通过医生的空瓶进行适配,将两个目标适配到一个适配者上。

解析:适配者与目标的角色关系弄反了,生理盐水是目标

11.装饰者模式静态地给一个对象增加一些额外的职责,这些职责也可以理解为功能

解析:并非静态

12.装饰者模式包含 构件和装饰者 两大部分

13.快递哥在发货之前一般要对货物进行打包,即便货物本身带有包装,这体现了装饰者模式中可以对构件进行多次装饰的特点,即便使用同一包装对货物进行重复打包(装饰)也是可以的。

解析:组合装饰(多重装饰)这是装饰者模式必须实现的功能,无论装饰者是否相同,都可以重复对构件进行装饰。

14.给电脑加装内存条和给手上戴一枚戒指相比,它们的不同点在于前者体现了桥接模式,后者体现了装饰者模式的特点,它们的相同点是能动态和透明地给单个对象添加或者实现职责

解析:比较桥接模式与装饰者模式的异同,就是这么回事

15.与装饰者模式相比,使用继承方式解决装饰问题更加易于出错,排错也更困难,调试时寻找错误可能需要逐级排查,较为烦琐

解析:这是装饰者模式的缺点,不是使用继承方式(笨办法)的缺点

16.代理模式包含以下3个角色:Client(用户角色)Proxy(代理主题角色)RealSubject(真实主题角色)

解析:用户角色不属于代理模式的角色,应该是抽象主题角色

17.新生晚会上请新生代表发言,这是属于智能引用代理。

解析:虚拟代理

18.如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建,这是属于智能引用代理

解析:这是 虚拟代理的概念,就跟上面的新生发言,毕竟不会让所有学生都发言

19.当一个网站需要统计网站访问次数,我们可以使用虚拟代理来解决问题

解析:这里就应该用智能引用

20.虚拟代理为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果

解析:这里是缓冲代理的概念

21.观察者、命令、代理三种模式中有一个不属于行为型模式。

解析:观察者是结构型模式

22.行为型模式主要用于描述对类或对象怎样交互和怎样分配职责。

解析:定义

23.命令模式将请求发送者和接收者完全解耦

解析:定义,一定要注意完全这个词

24.命令模式中的发送者与接收者之间没有直接引用关系

解析:也是定义

25.命令模式中的发送请求对象只需要知道如何发送请求,而不必知道如何完成请求

解析:定义

26.命令模式定义:将一个请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作

解析:前面提到过的定义,将请求封装为对象,使客户端与接收者解耦,支持请求排队、撤销等操作。​

27.在命令模式实现过程中,一个请求对应于一个命令,这里的“请求”是抽象命令,后面的“命令”指具体的命令

解析:理解命令模式的实现(类图)即可明白​

28.在命令模式类图中至少包含两个组合(聚合)关系,一个关系是调用者拥有抽象命令对象,另一个关系是接收者拥有具体命令

解析:细看这个:第二个关系是错误的,写反了,接收者是命令的执行者,不持有命令对象。实际关系是具体命令持有接收者​编辑

29.使用命令模式,新的命令可以很容易地加入到系统中,无需修改命令接收者,符合开闭原则

解析:无需修改命令发送者,不是接收者

30.在命令模式的实现中,一个请求对应一个命令,因此命令的发送者里边只能拥有一个抽象命令。

解析:一个请求的确对应一个命令 但是与发送者拥有多个请求(抽象命令)并不冲突

31.观察者模式中发生改变的对象称为观察目标,被通知的对象称为观察者

解析:定义

32.观察者模式定义了对象之间一种一对多的依赖关系,一个观察目标可以对应多个观察者

解析:也是前面提过了

33.在观察者模式的实现中,当目标发生改变的时候,观察者被目标改变而不是主动改变。

解析:实现过程中 目标与观察者的联动 是由目标改变观察者,不是观察者看到目标发生变化后,自己主动改变

34.观察者模式的联动是指一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变

解析:对象之间一种一对多的依赖关系

35.如果在具体目标与具体观察者之间具有关联关系,系统的扩展性将受到一定的影响,增加新的具体目标类有时候需要修改原有观察者的代码,在一定程度上违背了开闭原则

解析:有关联即就有依赖,那么扩展的时候就必然会受到影响,若扩展 的是依赖以外的,那么现有系统要兼容必须修改依赖关系,从而会破坏开闭原则。

36.在观察者模式的类图中,若具体目标与具体观察者之间没有关联,那么该模式在扩展新的观察者在一定程度上是符合开闭原则的。

解析:没有关联必然符合开闭原则,不是一定程度

37.可以实现表示层和数据逻辑层的分离,这是观察者模式的优点之一

解析:这是观察者模式的优点之一

38.观察者模式为了实现一对多的联动,在具体观察目标和观察者之间建立了一对多的耦合

解析:在抽象观察目标和观察者之间建立了一对多的耦合,不是具体

39.观察者模式没有相应的机制让观察目标知道观察者对象是怎么发生变化的,而只是知道观察者发生了变化

解析:观察者 不知道 观察目标为什么发生变化,这是观察者模式的缺点之一,题目表述说反了。

40.以下情况是可以使用观察者模式的:一个具体模型有两个方面,其中一个方面依赖于另一个方面,将这两个方面封装在独立的对象中使它们可以各自独立地改变和复用

解析:观察者模式的一对多依赖建立在抽象层,不是具体层,因此题目所述不满足 观察者适用条件


一.单选题

1.下面两个情景分别体现了什么设计模式

(1)给华为手机插上一张SD卡

(2)在网上购买华为手机的同时加购了一张SD卡

A.

(1)桥接模式(2)桥接模式

B.

(1)桥接模式(2)装饰模式

C.

(1)装饰模式(2)桥接模式

D.

(1)装饰模式(2)装饰模式

解析:(1)典型桥接模式(华为手机可适配不同品牌的 SD 卡,SD 卡也可插入其他品牌手机) (2)表面上是桥接,实际上加购商品是增加了购买的价格,不是真的把卡插到手机里边,价格的增加,由用户动态透明地增加,可以多次增加(装饰),这正是装饰模式的特点 

答案:B

2.将一桶酒装到酒瓶中,由于酒瓶瓶口比较小,直接将酒倒入酒瓶容易撒漏浪费,于是在酒瓶瓶口上放一个漏斗,通过漏斗就很好地解决了问题,这个情景说明

A.

漏斗是一桶酒和酒瓶之间的中介,体现了代理模式

B.

漏斗是一桶酒的桶口和酒瓶瓶口口径之间的转换器,体现了适配器模式

C.

漏斗是用户放在酒瓶瓶口上面的,以透明和动态的方式给酒瓶增加了可以使用酒桶装酒的职责(功能),体现了装饰模式

D.

漏斗是用户放在酒瓶瓶口上面的,激活了酒瓶可以用酒桶装酒的功能,体现了桥接模式

解析:漏斗是 大口转小口的适配器,显然体现的是适配器模式

答案:B

3.一个可以装东西的瓶子,装水就是水瓶,装酒就是酒瓶,装油就是油瓶,这体现了

A.

装饰模式

B.

代理模式

C.

适配器模式

D.

桥接模式

解析:这个瓶子装东西和上面的手机是一个道理,因此可得桥接模式

答案:D

4.刚出笼的包子直接手拿会很烫,在包子外面包一层纸之后就可以拿了,这说明

A.

手通过纸间接接触包子,纸作为中介,体现代理模式

B.

包子上包装了一层纸,这体现了装饰模式

C.

包子上加了一层纸,解决了手不能直接拿包子的兼容性问题,体现适配器模式

D.

包子上有了纸,使得包子激活了不直接接触手的功能,体现桥接模式

解析:从实用的角度,肯定是适配器模式,其他的都不适用

答案:C

5.目前的笔记本要把屏幕画面通过投影仪显示的话,通常由于笔记本视频输出接口与投影仪连接线不一致而需要使用转接头,对于上述情景描述,下面说法错误的是

A.

这体现了适配器模式,其中转接头就是适配器

B.

这体现了适配器模式,其中投影仪就是适配者

C.

若笔记本不能更换接口,投影仪连接线也不能换的话,那么使用转接头就只能是唯一的办法

D.

若目标 和 适配者 在出现兼容性问题之后,只要有任何一方妥协(主动去解决这个兼容性问题),那么转接头其实就可以不要了

解析:适配者是投影仪上的连接线转接头,不是投影仪,投影仪的说法是不准确的。

答案:B

6.壁柜上的东西太高了够不着,壁柜旁搭个漂亮的简易梯子就拿到了,这情景说明了

A.

梯子是人拿到壁柜里的东西的中介,体现代理模式

B.

梯子是壁柜的装饰,给与了壁柜更多的职责,体现装饰模式

C.

地板到壁柜上部,由用户动态安装了梯子,激活了人可以存取壁柜高处东西的功能,体现桥接模式

D.

梯子解决了人的高度和壁柜高度不兼容的问题,体现了适配器模式

解析:由题干易得,该场景中梯子体现出的最恰当的作用就是适配器,解决了高度不一致的兼容器问题,其他选项都不太适合。

答案:D

7.眼睛视力不好,戴一副眼镜后能看清楚东西了,这说明

A.

眼镜装饰了眼睛,使得眼睛具备了更多的职责(看得清),体现了装饰模式

B.

眼镜是实际景物与 眼睛之间的中介,体现了代理模式

C.

眼镜是用户动态地放在眼睛上的,激活了眼睛看得清的功能,体现了桥接模式

D.

眼镜解决了眼睛看不清景物的兼容性问题,体现了适配器模式

解析:眼镜的作用就是在不改变眼睛(目标)和景物(适配者)的前提下,矫正眼睛聚焦问题,起到转换的作用,体现的正是适配器模式特征

答案:D

 

8.我有一个易碎的玻璃瓶要快递哥给我寄到远方朋友那里,为了货物安全,我要求快递哥对货物进行多次包装。这个情景中,下面的说法正确的是

A.

这个情景体现了装饰者模式,易碎的玻璃瓶与包装纸都是构件

B.

在装饰模式类图中,抽象的构件继承了抽象的装饰者,那么装饰者可以进行重复装饰,也就是快递哥可以对货物进行多次包装

C.

这个情景体现了装饰者模式,快递哥是装饰者

D.

这个情景说明,装饰者也是一个构件,打包之后的玻璃瓶也是属于玻璃瓶类型的。

解析:抽象的装饰者继承了抽象的构件,使得装饰者与构件类型一致,于是乎可以多次装饰。

答案:D

9.有一天,我收到快递员送来的匿名包裹,打开层层包装纸,发现里边是一个美味的蛋糕。这段话说明

A.

快递员帮助那位神秘人把蛋糕送给我,体现了代理模式,快递员就是代理主题,蛋糕是真实主题

B.

层层包装纸 体现了装饰模式中的多重装饰,快递员就是装饰者

C.

在装饰者模式类图中,抽象构件拥有抽象装饰者对象,从而能够保存一份装饰者在装饰前的副本(具备了装饰回退的功能),这在实际中体现了我能够将层层包装纸拆开,从而得到未包装的蛋糕。否则,我要想吃蛋糕,只能带包装纸一块儿吃下去。

D.

匿名包裹 体现代理模式,层层包装纸 则体现了装饰模式,因此,本情景体现了两种模式。

解析:两种模式的体现。装饰模式类图中 抽象构件与抽象装饰者的两个关系的作用的深刻理解是此题解决的关键

答案:D

10.小明用天平称盐的质量,在天平的左边放了一堆盐,然后在天平右边放了一个5克砝码,再放了一个1克砝码,这时候天平两边平衡了。这个情景说明

A.

砝码代表了盐的质量,因此体现了代理模式

B.

天平就是一个桥,砝码与盐是桥的两端,体现了桥接模式

C.

足够的砝码解决了天平开始的不平衡问题,砝码是适配器,体现了适配器模式

D.

增加的砝码就像给天平装饰一样东西,使得天平可以称更大的质量,体现了装饰模式

解析:天平就是来称东西的,你要算出盐的质量就必须加砝码

答案:D

11.茶里加奶变奶茶,茶里加油变油茶,这说明

A.

奶和油基本替代了茶,味道大不同,体现了代理模式

B.

茶里不管加奶也好,加油也罢,都是动态激活了茶的特殊功效,体现了桥接模式

C.

奶和油改变了茶的口味,这种转变正是适配器干的事儿,因此体现了适配器模式

D.

奶和油都给茶带来了新的味道,动态地给茶增加了新的职责,体现了装饰模式

解析:茶是构件,奶和油都是装饰者,可以单独加,也可以组合加。因此体现装饰模式

答案:D

 

 

12.近期小明学习下滑却害怕跟家长说,于是老师今天家访,与家长沟通了近期小明学习下滑的情况,这情景说明

A.

老师解决了 家长不能及时知晓小明的学习情况的问题,体现了适配者模式

B.

家长与老师进行沟通,若是语文老师则了解语文学习情况,若是数学老师,可了解数学情况,这体现了桥接模式

C.

老师取代了学生 给家长汇报了学生的学习情况,这体现代理模式

D.

老师可以多次家访,相当于多次装饰,所以体现了装饰模式

解析:本质上是小明需要老师帮助说明自身情况

答案:C

13.某人才招聘网站要求第三方软件公司开发一个通用的实现权限管理和统计网站访问量的程序,以便于能在不修改人才招聘网站的前提下,通过该程序来实现相应功能。此情景体现了

A.

安全代理和虚拟代理

B.

安全代理和远程代理

C.

智能引用代理和虚拟代理

D.

智能引用代理与安全代理

解析:智能引用代理的作用是在访问真实对象时,执行一些额外的操作,比如记录访问次数、计算引用计数、延迟加载等;而权限自然就是涉及到安全

答案:D

14.小丽刚生下孩子,急需人照顾,于是请了月嫂来照顾她。这说明

A.

月嫂解决了没人照顾的矛盾,体现适配器模式

B.

月嫂来得越多,没人照顾的矛盾就会越小,体现多次装饰的特点,因此属于装饰模式

C.

请月嫂动态地激活了小丽被人照顾的功能,体现了桥接模式

D.

月嫂替代了家人照顾小丽的作用,体现了代理模式

解析:本身是月嫂代替原本家人的照顾

答案:D

15.在表彰会上,小明要代表A班去领奖,可小明有事走不开,于是临时找了一个同学帮他去领奖,这情景体现了

A.

远程代理 和 智能引用代理

B.

虚拟代理 和 智能引用代理

C.

虚拟代理 和 远程代理

D.

远程代理

解析:首先要排除AB,因为不涉及到智能引用(毕竟那个同学不需要在领完奖之后单独再给小明汇报一下现场有多少人)。“代表”体现了 虚拟代理 ,“走不开 ,让人家去”体现了 远程代理

答案:D

16.在( )时无须使用命令模式

A.

实现撤销(Undo)操作和恢复(Redo)操作

B.

将请求的发送者和接收者解耦

C.

不改变聚合类的前提下定义作用于聚合中元素的新操作

D.

不同的时间指定请求,并将请求排队

解析:访问者可在不修改聚合类的前提下,定义作用于元素的新操作。命令模式不涉及聚合操作的扩展。

答案:D

17.以下关于命令模式的叙述错误的是(  )

A.

命令模式将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化。

B.

命令模式可以将请求发送者和接收者解耦

C.

使用命令模式会导致某些系统中有过多的具体命令类,也会导致有些系统中命令模式变得不切实际

D.

命令模式是对命令的封装,命令模式把发出命令的责任和执行命令的责任集中在同一个类中,委派给统一的类来进行处理

解析:命令模式将命令发送者与命令执行者解耦,而不是集合在同一个类

答案:D

18.关于观察者模式,表述错误的是(  )

A.

观察者角色的更新是被动的

B.

观察目标可以通知观察者进行更新

C.

当观察目标改变时,它必须明确知道有多少个对象的状态需要改变

D.

 该模式定义了对象之间的一种一对多的依赖关系

解析:观察目标改变并不依赖于观察者,就算观察目标不知道有多少个观察者,也只是“遗漏”通知观察者改变状态,对整个系统运作并不产生实质影响

答案:C

19.观察者模式适用于( )

A.

 当一个抽象模型存在两个方面,其中一个方面依赖于另一方面,将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。

B.

当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变时。

C.

当一个对象的功能不能满足实际需要,需要动态的增加额外的功能时。

D.

一个对象结构包含很多类对象,它们有不同的接口,而想对这些对象实施一些依赖于其具体类的操作。

解析:A是桥接,C是装饰器,D是访问者

答案:B

20.对行为型模式说法正确的是

A.

主要用于创建对象,关注对象的创建过程的一系列模式

B.

关注如何将现有类或对象组织在一起形成更加强大的结构

C.

关注系统中对象之间的交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责

D.

处理对象间的关系,这些关系在运行时变化,更具动态性

解析:行为型模式主要用于描述类或对象如何交互和怎样分配职责

答案:C

21.命令模式、代理模式、工厂模式、装饰模式、观察者模式 这5个模式中,属于行为型模式的有几个?

A.0

B.1

C.2

D.3

解析:命令模式是行为型模式,代理模式也是;工厂模式是创建型,装饰和观察者是行为型模式

答案:C

22.下列哪一个描述的是命令模式

A.

将一个请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。

B.

定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。

C.

避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。

D.

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

解析:B是观察者;C是责任链模式;D是状态模式

答案:A

23.下面哪种描述最符合观察者模式

A.

避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。

B.

定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。

C.

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

D.

提供一种方法顺序访问一个聚合对象中的各个元素,且不用暴露该对象的内部表示。

解析:和前面一样

答案:B

24.命令模式的本质是对请求进行封装,一个“请求”对应于一个“命令”,将发出命令的责任和执行命令的责任分开。在这句话中,打引号处的两个词“请求”和“命令”的说法正确的是

A.

“请求”是抽象命令,“命令”是具体命令

B.

“请求”是抽象命令,“命令”是抽象命令

C.

“请求”是具体命令,“命令”是抽象命令

D.

“请求”是具体命令,“命令”是具体命令

解析:“请求”是抽象命令,“命令”是具体命令

答案:A

25.以下角色属于命令模式的是

A.

Invoker(调用者)

B.

目标

C.

构件

D.

工厂

解析:BCD均不是;命令模式包含以下4个角色:
Command(抽象命令类)
ConcreteCommand(具体命令类)
Invoker(调用者)
Receiver(接收者)

答案:A

26.关于命令模式的通用类图的说法错误的是

A.

命令调用者类 可以拥有多个抽象命令

B.

命令调用者类在调用一个抽象命令时,可以由1到多个具体命令来实现

C.

具体命令类通过拥有命令的接收者、调用命令接收者的实现命令的方法来完成命令的执行,不能脱离命令接收者而单独实现命令

D.

命令的接收者 也是 命令的执行者或者命令的实现者,与命令的发送者没有直接的关系

解析:某一个抽象命令由某一个具体命令实现。一对一

答案:B

27.观察者模式与下面哪种模式的作用比较类似

A.

事务(Transaction)模式

B.

包装器(Wrapper)模式

C.

接口(Interface)模式

D.

模型-视图(Model/View)模式

解析:事务(Transaction)模式——命令模式

包装器(Wrapper)模式——适配器模式

接口(Interface)模式——桥接模式

模型-视图(Model/View)模式——观察者模式

答案:D

28.下面哪个角色是属于观察者模式

A.

主题

B.

构件

C.

目标

D.

接收者

解析:观察者模式存在:主题、观察者、具体主题、具体观察者

答案:A

29.下面关于观察者模式通用类图的说法,不正确的是

A.

抽象目标中应该有一个保存观察者对象的集合,应该有增减观察者的两个具体方法 和一个抽象的通知方法

B.

抽象观察者应该有一个抽象的更新观察者自身状态的方法

C.

具体目标中应该有一个自我改变状态的方法 和 一个通知所有 观察者改变状态的方法

D.

具体观察者应该有一个 具体的更新自身状态的方法,并且,为了响应与观察目标的联动,还需有一个监控观察者目标发生状态改变的联动方法

解析:具体观察者无需一个监控观察者目标发生状态改变的联动方法,为了效率问题,由具体观察目标的通知方法发起联动。

答案:D

30.下面哪一个不是观察者模式的缺点

A.

将所有的观察者都通知到会花费很多时间

B.

使用观察者模式可能会导致某些系统有过多的具体观察者类(针对每一个对观察者的联动操作都需要设计一个具体观察者类)

C.

如果存在循环依赖时可能导致系统崩溃

D.

没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而只是知道观察目标发生了变化

解析:使用观察者模式是一(观察目标)对多(观察者)的联动,这是它设计初衷,是特色和优点之一,不是缺点

答案:B

 

二.判断题

1.结构型模式(Structural Pattern)关注如何将现有类与类之间、类与对象之间组织在一起形成更加强大的结构

答案:对

2.对象结构型模式关心类与对象的组合,通过关联关系,在一个类中定义另一个类的实例对象,然后通过该对象调用相应的方法

答案:对

 

3.桥接模式模式的定义是将抽象部分和现实部分紧密关联,使得两者可以独立地变化。

解析:抽象部分和实现部分是解耦,不是紧密关联

答案:错

4.钢笔与蜡笔相比,使用了桥接模式,分离了抽象部分与实现部分,钢笔所使用的墨水就是其抽象部分

解析:和手机是一个类型,但是墨水并非是其抽象部分,反而是实现部分

答案:错

5.桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,不需要修改原有系统,符合开闭原则

解析:这就是桥接模式的优点

答案:对

6.对象适配器模式可以把多个不同的适配者适配到同一个目标

解析:你可以让一个屏幕用上不同设备的转接线,就是这种逻辑

答案:对

7.适配器模式将目标类和适配器类解耦,通过引入一个适配者类来重用现有的目标类,无须修改原有结构,这是适配器模式的优点

解析:并非重用目标类,应该是通过引入适配器类,重用现有的适配者类,并将其接口转换为目标类接口

答案:错

8.对象结构型的适配器模式可以把多个不同的适配者适配到同一个目标,还可以适配一个适配者的子类

解析:和6一个道理,至于适配子类,也就是向下扩展罢了

答案:对

9.系统A需要带一个参数的查询方法,系统B能提供带两个参数的查询方法,为了让系统B满足系统A的要求,我们在系统B中增加了带一个参数的查询方法,使得系统A与系统B能兼容,但这是不符合适配器模式的思想的

解析:适配器模式的适用场景可知,适配器就是适用于 目标方与提供方不兼容,且不用修改的场合;这里的目标方其实就是A,提供方是B,你要做的不是修改B,而是对B再做一个接口来组合B或者用一个类继承B来做适配

答案:对

10.病人需要喝生理盐水,而护士拿出了一瓶水和一瓶盐,这之间不匹配,于是医生另外拿出一个空瓶,将水和盐按照规定比例兑成生理盐水,从而满足了病人的需要。这件事情中可以看出一瓶水和一瓶盐是两个目标,生理盐水是适配者,通过医生的空瓶进行适配,将两个目标适配到一个适配者上。

解析:适配者与目标的角色关系弄反了,生理盐水是目标

答案:错

11.装饰者模式静态地给一个对象增加一些额外的职责,这些职责也可以理解为功能

解析:并非静态

答案:错

12.装饰者模式包含 构件和装饰者 两大部分

答案:对

13.快递哥在发货之前一般要对货物进行打包,即便货物本身带有包装,这体现了装饰者模式中可以对构件进行多次装饰的特点,即便使用同一包装对货物进行重复打包(装饰)也是可以的。

解析:组合装饰(多重装饰)这是装饰者模式必须实现的功能,无论装饰者是否相同,都可以重复对构件进行装饰。

答案:对

14.给电脑加装内存条和给手上戴一枚戒指相比,它们的不同点在于前者体现了桥接模式,后者体现了装饰者模式的特点,它们的相同点是能动态和透明地给单个对象添加或者实现职责

解析:比较桥接模式与装饰者模式的异同,就是这么回事

答案:对

15.与装饰者模式相比,使用继承方式解决装饰问题更加易于出错,排错也更困难,调试时寻找错误可能需要逐级排查,较为烦琐

解析:这是装饰者模式的缺点,不是使用继承方式(笨办法)的缺点

答案:错

16.代理模式包含以下3个角色:
Client(用户角色)
Proxy(代理主题角色)
RealSubject(真实主题角色)

解析:用户角色不属于代理模式的角色,应该是抽象主题角色

答案:错

17.新生晚会上请新生代表发言,这是属于智能引用代理。

解析:虚拟代理

答案:错

18.如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建,这是属于智能引用代理

解析:这是 虚拟代理的概念,就跟上面的新生发言,毕竟不会让所有学生都发言

答案:错

19.当一个网站需要统计网站访问次数,我们可以使用虚拟代理来解决问题

解析:这里就应该用智能引用

答案:错

20.虚拟代理为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果

解析:这里是缓冲代理的概念

答案:错

21.观察者、命令、代理三种模式中有一个不属于行为型模式。

解析:观察者是结构型模式

答案:对

22.行为型模式主要用于描述对类或对象怎样交互和怎样分配职责。

解析:定义

答案:对

23.命令模式将请求发送者和接收者完全解耦

解析:定义,一定要注意完全这个词

答案:对

24.命令模式中的发送者与接收者之间没有直接引用关系

解析:也是定义

答案:对

25.命令模式中的发送请求对象只需要知道如何发送请求,而不必知道如何完成请求

解析:定义

答案:对

26.命令模式定义:将一个请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作

解析:前面提到过的定义,将请求封装为对象,使客户端与接收者解耦,支持请求排队、撤销等操作。​

答案:对

27.在命令模式实现过程中,一个请求对应于一个命令,这里的“请求”是抽象命令,后面的“命令”指具体的命令

解析:理解命令模式的实现(类图)即可明白​

答案:对

28.在命令模式类图中至少包含两个组合(聚合)关系,一个关系是调用者拥有抽象命令对象,另一个关系是接收者拥有具体命令

解析:细看这个:第二个关系是错误的,写反了,接收者是命令的执行者,不持有命令对象。实际关系是具体命令持有接收者软件设计模式选择、判断解析-2_第1张图片

答案:错

29.使用命令模式,新的命令可以很容易地加入到系统中,无需修改命令接收者,符合开闭原则

解析:无需修改命令发送者,不是接收者

答案:错

 

30.在命令模式的实现中,一个请求对应一个命令,因此命令的发送者里边只能拥有一个抽象命令。

解析:一个请求的确对应一个命令 但是与发送者拥有多个请求(抽象命令)并不冲突

答案:错

31.观察者模式中发生改变的对象称为观察目标,被通知的对象称为观察者

解析:定义

答案:对

32.观察者模式定义了对象之间一种一对多的依赖关系,一个观察目标可以对应多个观察者

解析:也是前面提过了

答案:对

33.在观察者模式的实现中,当目标发生改变的时候,观察者被目标改变而不是主动改变。

解析:实现过程中 目标与观察者的联动 是由目标改变观察者,不是观察者看到目标发生变化后,自己主动改变

答案:对

34.观察者模式的联动是指一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变

解析:对象之间一种一对多的依赖关系

答案:对

 

35.如果在具体目标与具体观察者之间具有关联关系,系统的扩展性将受到一定的影响,增加新的具体目标类有时候需要修改原有观察者的代码,在一定程度上违背了开闭原则

解析:有关联即就有依赖,那么扩展的时候就必然会受到影响,若扩展 的是依赖以外的,那么现有系统要兼容必须修改依赖关系,从而会破坏开闭原则。

答案:对

36.在观察者模式的类图中,若具体目标与具体观察者之间没有关联,那么该模式在扩展新的观察者在一定程度上是符合开闭原则的。

解析:没有关联必然符合开闭原则,不是一定程度

答案:错

37.可以实现表示层和数据逻辑层的分离,这是观察者模式的优点之一

解析:这是观察者模式的优点之一

答案:对

38.观察者模式为了实现一对多的联动,在具体观察目标和观察者之间建立了一对多的耦合

解析:在抽象观察目标和观察者之间建立了一对多的耦合,不是具体

答案:错

39.观察者模式没有相应的机制让观察目标知道观察者对象是怎么发生变化的,而只是知道观察者发生了变化

解析:观察者 不知道 观察目标为什么发生变化,这是观察者模式的缺点之一,题目表述说反了。

答案:错

40.以下情况是可以使用观察者模式的:一个具体模型有两个方面,其中一个方面依赖于另一个方面,将这两个方面封装在独立的对象中使它们可以各自独立地改变和复用

解析:观察者模式的一对多依赖建立在抽象层,不是具体层,因此题目所述不满足 观察者适用条件

答案:错

 

你可能感兴趣的:(杂谈,Java,软件设计模式,设计模式,开发语言,Java设计模式,软件设计模式,Java)