|
东 北 大 学 继 续 教 育 学 院
. }# A5 K/ T! a2 u7 t6 M 软件设计模式(一)X 试 卷(作业考核 线上2) B 卷(共 7 页)
3 `8 D: j" ^ l% _. x总分 题号 一 二 三 四 五 六 七 八 九 十2 n# s! i+ b/ q, W8 G5 g! g, `6 ^
得分 4 ]. e% v, b: t* \9 x
一、单选题(共40分,每题2分)( f, x9 M& n( v
1. 常用的基本设计模式可分为()9 h0 J( n, m, e, U$ K2 G$ q# A
A.创建型、结构型和行为型 B. 对象型、结构型和行为型8 s' K, z$ n) @4 g5 } o1 r% P
C.过程型、结构型和行为型 D. 抽象型、接口型和实现型* x# w7 ^/ h- P+ K( B G" t* ?
2. 对以下开闭原则的描述错误的是()6 E8 D8 k$ t0 @& U
A.开闭原则与“对可变性的封装原则”没有相似性
/ {* b: v9 F, ~9 S7 RB.找到个系统的可变元素,将它封装起来,叫开闭原则
: I* D, Z) q' f$ K/ q. q2 J- VC.对修改关闭,是其原则之一
' D* P6 G r+ p5 ?; [. |D.从抽象层导出一个或多个新具体类可以改变系统的行为,是其原则之一# T3 G' P7 d! m7 ~
3. “不要和陌生人说话”是()原则的通俗表述。
' s6 o/ p7 @5 l* |A. 接口隔离 B. 里氏替换 C. 依赖倒置 D. 迪米特
* N2 \& I2 Y e6 s9 i1 J4. 当创建一个具体的对象而又不希望指定具体的类时,可以使用()" G2 p7 d! I) s; Q( P/ c
A. 结构型 B. 创建型 C. 行为型 D.以上都可以0 ?7 x2 J7 Z0 |9 r. C3 f
5. 以下( )是利用一个对象,快速地生成一批对象。
& n7 R# S5 d( wA. 抽象工厂(Abstract Factory)模式 B. 原型(Prototype)模式' w* ^1 i& n% z M
C. 合成(Composite)模式 D. 桥接(Bridge)模式
# } H4 A/ a& J( ]3 U ` V6. 以下( )用来描述建造者( Builder )。( I/ A+ J* T9 B* Q5 i
A. 定义一个用于创建对象的接口,让子类决定实例化哪一个类, J7 t- F N) }
B. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示4 f `% Z' t3 T6 t$ G- Y
C. 保证一个类仅有一个实例,并提供→个访问它的全周访问点
/ ^3 p0 ]5 Y/ p- qD. 运用共享技术有效地支持大量细粒度的对象
/ u' |+ n# g/ B- k/ D: z _7. 以下( )用来描述工厂方法(Factory Method)模式。! {' y) {2 n# ]% [. q! `
A. 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类
% ~& ?3 d6 m [7 wB. 表示一个作用于某对象结构中的各元素的操作。它使用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作* a! R" U# j, N) K, _( g- @' S/ W& M
C. 定义一个用于创建对象的接口,让子类决定实例化哪一个类。该模式使一个类的实例化延迟到其子类1 E" G( T" E9 w+ ]4 W
D. 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化6 [- X$ y' ]7 I8 ^: @
8. 对象适配器模式是( )原则的典型应用。+ k# E. ~- ^4 e3 A
A. 将一个类的接口转换成客户希望的另外一个接口,本模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。
" m5 D: }" }! T6 S% N j) fB. 定义一个用于创建对象的接口,让子类决定实例化哪一个类8 N- @( _3 F$ z& B* D: `. | t- f
C. 表示一个作用于某对象结构中的各元素的操作,它使用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作
8 c" c+ {/ y- |& R, X% s9 pD. 将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作
9 P& B3 e& G% P+ E' @9. 关于模式适用性,以下( )不适合使用Flyweight(享元)模式。
; H9 _% v6 W+ v v6 kA. 一个应用程序使用了大量的对象) i" \% n9 {/ |. x2 }; A
B. 完全由于使用大量的对象, 造成很大的存储开销* }+ a a" K+ J0 E1 s1 @5 N7 X
C. 对象的大多数状态都可变为外部状态0 C/ m, A0 W) n$ @
D. 用户想使用一个已经存在的类,而它的接口不符合用户的需求* h4 Y2 T/ q r( r
10. 下面不属于创建型模式的有( )。
) I1 m; T$ w4 T' v; e* `) tA. 抽象工厂模式(Abstract Factory) B. 适配器模式 (Adapter)
" P4 O: C2 s# J, m; H' ]C. 工厂方法模式(Factory Method) D.单例模式(Singleton), F3 B- B- A' N, A; {; {2 n
11. 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。这句话是对哪种模式的描述( )。, c; z; a. |9 r- `
A.观察者模式(Observer) B.桥接模式(Bridge)9 S r0 ?% \. P9 @
C.适配器模式(Adapter) D.策略模式(Strategy)
4 E3 v3 u* d, L5 d3 B+ F12. 若系统中的某子模块需要为其他模块( )提供访问不同数据库系统的功能,这些数据 库系统提供的访问接口有一定的差异,但访问过程却都是相同的,例如,先连接数据库,在打开数据库,最后对数据库进行查询,设计模式可抽象出相同的数据库访问过程。2 A6 n' S/ o1 H+ e
A. 外观 B. 装饰 C.单间 D.模板方法) J) t+ c4 L. `2 `
13. Decorator(装饰)模式的意图是:( )。$ K( K1 j! S0 }; d/ A8 H) C, q
A. 定义一系列的算法,把它们一个个的封装起来,并且使它们可相互替换。9 N2 Z* K5 Z. b( P3 v T- z5 I
B. 为一个对象动态连接附加的职责。. p# M' Z! e* G9 I
C. 你希望只拥有一个对象,但不用全局对象来控制对象的实例化。
) g4 u9 {* K a8 Q$ p/ d0 ?' Q/ RD. 在对象之间定义一种一对多的依赖关系,这样当一个对象的状态改变时,所有依赖于它的对象都将得到通知并自动更新。
* s2 f3 |) I3 v+ o# ^0 |9 O14. Singleton模式适用于( )。
) G3 G% \4 ^8 I2 B" m. @5 _' V6 pA. 当类有多个实例而且客户可以从一个众所周知访问点访问它时。
" ?% L: }7 I9 M6 \' J! w' G+ cB. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。% }* M& s- X2 c
C. 当构造过程必须允许被构造的对象有不同的表示时。
F4 E2 Z- y' ?# j FD. 生成一批对象时。- `$ a0 ^; f- I9 R* T* L
15. 下列模式中,属于行为模式的是( )。: [6 x9 C, i3 [- p
A. 工厂模式 B. 适配器 C. 观察者 D.以上都是
- D& Y. w% S* Q( w16. 关于工厂方法,以下叙述不正确的是( )。
6 N. Q' z4 w) A$ T' N+ ?A. Factory Method是一个用于帮助分配创建的责任的模式。: A) Z+ v+ X- j$ Y U
B. Factory Method模式和Abstract Factory模式总是配合使用。
9 D) D9 a8 t5 [" K0 m: p( |+ L/ F( eC. Factory Method适用于将对象实例化的规则推迟到某个派生类的情形。
- k( q# A( X9 o" o% s7 pD. Factory Method是属于创建型模式。
1 Y( c1 p# \( C% w$ S7 ~/ w17. 以下意图( )可用来描述解释器(Interpreter)。
9 A% H0 L; T) c. ~' Z; OA. 将抽象部分与它的实现部分分离,使它们都可以独立变化
" d& U2 Z, r2 L0 O" t/ M- QB. 给定一个语言, 定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子7 D: {2 D, X4 r5 W- {
C. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示- n' R8 C& l0 |2 z
D. 为其他对象提供一种代理以控制对这个对象的访问
, K g. Y+ D. V" t18. 在观察者模式中,表述错误的是( )。
d+ _* F E; H* `1 _A. 人观察者角色的更新是被动的
3 f' D! L( `$ b& NB. 被观察者可以通知观察者进行更新% z: `; l3 ^$ G; s; f( b5 G; x
C. 观察者可以改变被观察者的状态,再由被观察者通知所有观祟者依据被观察者的状态挂行D. 以上表述全部错误
; J% r; j& z* M1 r; C0 [; s19. 以下意图( )是用来描述组合(Composite)。8 ^" E A" s4 F. Q; j, a) Y% y
A. 为其他对象提供一种代理以控制对这个对象的访问+ y' E1 j2 o4 {2 j: ^: N2 N% w
B. 运用共享技术有效地支持大量细粒度的对象
c7 {1 O; x3 O. N: o; E% d+ FC. 将对象组合成树形结构以表示“部分”整体”的层次结构
! ~/ S& R" x o. MD. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示/ G9 z7 [5 l: s. I) t
20. 设计模式具有的优点()。; ^( n+ e2 @/ V$ f0 B6 g
A. 适应需求变化 B. 程序易于理解 * |, b# ~6 H, f; L2 m+ W2 d2 E
C.减少开发过程中的代码开发工作量 D. 简化软件系统的设计
& i5 _7 ?$ D" B; o# ~' B( @& d二、多选题(共10分,每题2分)& t. A. n: ?5 U/ N% h
1. 以下是模式的基本要素的是( )。/ K8 s! ]0 y; r8 P P
A. 名称 B. 意图 C. 解决方案 D. 参与者和协作者" z; m1 v3 q$ H: O4 S1 {
2. 当应用工厂方法( Factory Method )模式时要考虑( )。
1 R5 ?( Y, ^% m; H% o2 ]A. 主要有两种不同的情况 B. 参数化工厂方法
" b! W. D N' B" e( T+ n6 D, v+ t, ~C. 特定语言的变化和问题 D. 使用模板以避免创建子类
: c1 n Z- {7 Q1 T6 q6 f, c# u3. 以下属于结构型模式的是( )。4 b) t& z t4 z3 u7 m
A. 代理(Proxy) 模式 B. 合成(Composite)模式
0 C4 F3 b* o# {C. 命令(Command)模式 D.观察者(Observer)模式" c& ~. J; J2 c" I" B5 t
4. 装饰( Decorator )模式的两个主要缺点是( )。, d3 P. _4 h# T
A. 比静态继承更灵活 B.避免在层次结构高层的类有太多的特征
9 h" s( S/ U5 t; RC. 有许多小对象,很容易对它们进行定制,但是很难学习这些系统,排错也很困难
7 s! C6 q3 [. l/ O. T: XD. 装饰与它的组成不一样,装饰是一个透明的包装
) t# X( I, x9 b7 h( C5. 中介者模式有以下( )优点。
. G2 P) e0 M u8 C8 s* hA. 简化了对象之间的交互 B. 简化了同事类的设计和实现; R( G8 C G9 b3 k6 r1 t
C. 封装了转换规则 D. 减少了子类生成* i" D0 R* Q( G: c0 I5 P3 ~
三、资料来源:谋学网(www.mouxue.com)(共10分,每题1分;请在认为正确的题目后面写T,错误的题目后面写F)
+ K) f4 ^" V8 Y0 @/ j( D1. 设计模式的两大主题是系统复用与系统扩展。( ) {* W! j1 ?( V# g. u+ m8 _% b: i% N
2. 抽象工厂模式提供了一系列相关或相互依赖对象的接口且必须指定他们具体的类。( )
- C9 ?! ~9 }8 D% F2 h3. 对象适配器模式是依赖倒转原则的典型应用。( ). {5 n. I( C; R% t1 W# h* N+ I3 Z b
4. Open-Close原则的含义是一个软件实体应当对扩展开放,对修改关闭。( )
6 f" v ]; r/ x3 ~2 l5 K0 U5. Singleton(单例)模式属于结构性模式。( )' s1 ? l+ m- M
6. 常用的设计模式可分为过程型、创建型和结构型。( )" l$ Z: y9 n! z* f/ s& h" }
7. 对观察者模式,触发事件的对象——Subject对象不需要知道观察事件的所有对象。( )% r0 f& }; }/ c: W- f6 D" z1 a4 B
8. 通过在问题领域中使用模式,可以用一种不同的方式来看待问题。( ). B3 L& \7 H. |- b, S M9 ^7 \
9. Strategy模式可以用不同的方式调用所有的算法。( )0 ]7 ]% l. u; ?9 c$ [ c
10. 当依赖关系固定(或几乎固定)时,加入一个Observer(观察者)模式可能只会增加复杂性。( )7 O% W" X6 E% s( [2 ?
四、更多资料下载:谋学网(www.mouxue.com)(共15分,每题3分)
7 [& B: V d0 w- f* M# Z Z1 X+ [1. 设计模式
7 Z" i0 _/ y; W4 t% `% T
E: K" ^$ i- H$ Y5 M9 K! f. B/ }! C F* ]5 d
; a2 A% ]8 T8 b8 `5 V9 b2. 开闭原则
3 D7 t! z8 v) V* G0 G) P5 _3 U9 _% d
6 `0 r e$ I/ K" K. Z* p8 c$ u/ N& |* `7 ? h! a9 x
3.单一职责原则
4 o& A T& X" r9 S* K' b8 g$ _ X5 c g3 h% D, e6 A. q) ^
: w ~5 ?% ]; ]/ p2 M1 V ?/ Y
u p3 O. ]7 W+ h% G' v) @
4.依赖关系
0 R: G: l$ k1 ~+ [/ D# w# a' R- n) G: t+ Q0 F7 u/ L, a' f, V0 U6 f
1 Z8 _ b& q2 j* Z# T2 _+ y
+ Y, `/ y& q' E! s' F5.组合关系, C& H* ?% E3 U/ j
/ h) l7 C2 o6 Z3 m" [( `: b8 R, x7 i" n. i- ~
% z4 N8 z. ^- t* @ g0 S五、更多资料下载:谋学网(www.mouxue.com)(共15分,每题5分)( f( |1 S" @2 \9 q; D2 q
1. 设计模式一般有哪几个基本要素? \; O6 w% c( \7 J0 Q
: Z" `3 a/ s2 r, r# `* b2 L6 Q$ P/ M+ F' N
; Z0 g1 R) K$ M$ d+ ^( @3 s
8 O. U5 h- Q' L* X8 P% N
) k3 g y3 E0 C# R, A# Z4 J) W _6 J* V9 A, l7 G
- g" R! ~* q$ M4 p' j8 Z
2. 创建型模式分包括哪几种设计模式,各是什么并简要说明。2 d$ L3 [* B' x5 u* E8 S6 ]
( M2 O8 {5 j" M( {% S# j
% L R( _* c8 h H% l, Q" w
3 `8 M% f& g5 a5 C7 b1 E) c2 `. i/ [' _" I$ U- _0 R. d$ g
u0 r/ p0 X( E. j0 h: j4 c; C3 l. r
2 \5 j* s: I) M( y' h' M2 j4 Z+ L6 U& z" I. I' T& H7 S) f# i
3. 说明访问者模式的定义与主要优缺点。$ |7 y ~' a7 d$ R3 n- g
) C5 h* d8 e- w7 z, z0 F& B: y, @3 ^. |6 ]7 _( c
6 y0 T3 ]7 p- y. ?
+ y) |$ b# R: A) A
* x' e# U/ y: H8 S
2 r+ X+ {% T; S# U
3 ]+ W7 d' W$ l$ V3 p; n* x2 M
$ s V* p3 G8 s5 C9 Y- W5 `5 I) v ~8 I! E" W6 s3 E
( H7 U& l0 {3 ^7 s6 E
! Z8 t5 \4 i: l4 ^. a/ r六、综合题(共10分)
# T4 Q( f- f: E, D, x$ G当“人民币汇率” 升值时, 进口公司的进口产品成本降低且利润率提升,出口公司的出口产品收入降低且利润率降低; 当“人民币汇率” 贬值时,进口公司的进口产品成本提升且利润率降低, 出口公司的出口产品收入提升且利润率提升。利用观察者模式设计一个程序, 分析“人民币汇率”的升值或贬值对进口公司的进口产品成本或出口公司的出口产品收入以及公司的利润率的影响。
. J5 V# M, L0 U# M' `! `提示:这里的汇率(Rate) 类是抽象目标类,它包含了保存观察者(Company ) 的List 和增加/删除观察者的方法, 以及有关汇率改变的抽象方法change(int number); 而人民币汇率(RMBrate)类是具体目标,它实现了父类的change(int number)方法,即当人民币汇率发生改变时通过相关公司; 公司(Company)类是抽象观察者, 它定义了一个有关汇率反应的抽象方法respons巳(int number); 进口公司( ImportCompany )类和出口公司( E xportCompany )类是具体观察者类,它们实现了父类的response(int
8 ^1 ]9 e1 [& [) X; d, Fnumber)方法, 即当它们接收到汇率发生改变的通知时作为相应的反应。
+ Q1 |7 j% `* W5 g$ k! ]请画出该程序的类图。
8 S l$ ^2 m( H/ D9 R* N
. t8 @2 y/ i- A! M2 ~9 ~$ V7 T7 T" Y( V. M. }) O
8 Q0 C7 Q( q. O% {+ z. i
; y1 w- A5 y( e* e* o
$ f$ w9 i; ~! r$ \* a
, `+ L' K* ^8 g4 \( w6 x
% a( C. {" x, s
: p$ F' [% e7 g7 q# v7 W
2 U* A. T: d- j% E' z$ Z9 y
" q' l4 c; V( _8 ~5 R: p9 T3 O) n0 C5 G& i2 Z
! S8 r8 _6 _* @
; ]8 U! v X6 x9 d: Y5 \) O- s' t3 q+ e
. s. V* c% u% j4 Z B6 {
: B. |7 n' W$ u* h6 S+ Y! I
3 e7 `4 |6 j( ]# o9 I: \6 f" T9 e& @ ^- ]; r, j
. ]* a2 m A+ k/ W3 I
5 l2 O: N# ~) g# \+ P |
|