《Java 设计模式》模拟试题参考答案及评分标准
教材:刘伟. Java 设计模式. 北京: 清华大学出版社, 2018.
ISBN: 9787302488316
【说明:如有意见和建议,请通过电子邮箱 weiliu_china@126.com 与作者联系!】
模拟试题一
一、选择题(每题 2 分,共 30 分)
(1)
C
(9)
A
(2)
A
(10)
B
(3)
A
(11)
C
(4)
D
(12)
A
(5)
B
(13)
C
(6)
C
(14)
B
(7)
D
(15)
D
(8)
B
二、填空题(每题 1 分,共 10 分)
1. 里氏代换原则 2. 迪米特法则 3. 简单工厂
4. 建造者 5. 外观 6. 享元
7. 职责链 8. 解释器 9. 状态
10. 访问者
三、综合应用题(每题 12 分,共 60 分)
1. 开闭原则的定义:软件实体应该对扩展开放,对修改关闭。【4 分】
说明:【8 分】
工厂方法模式代码片段如下:
//抽象工厂类
public abstract class Factory {
public abstract Product createProduct();
}
//具体工厂类
public class ConcreteFactoryA extends Factory {
public Product createProduct() {
return new ConcreteProductA();
}
}
在客户端存在如下代码片段:
……
Factory factory;
factory = new ConcreteFactoryA(); //可通过反射和配置文件来实现,修改具体工厂类无须修
改源代码
Product product;
product = factory.createProduct();
在工厂方法模式中,引入了抽象工厂类,例如上面代码中的 Factory,所有具体工厂类
1
都是 Factory 的子类(例如 ConcreteFactoryA),具体工厂类负责创建具体的产品。如果要新
增一个具体产品 ConcreteProductB,只需要对应增加一个新的具体工厂类 ConcreteFactoryB
作为 Factory 类的子类,并实现在 Factory 中声明的 createProduct()方法即可,无须修改已有
工厂类和产品类的源代码;在客户端代码中需要将 ConcreteFactoryA 改为 ConcreteFactoryB,
如果采取反射和配置文件等方式来实现的话,只需修改配置文件中存储的类名即可,客户端
代码也无须修改,完全符合开闭原则。
2. 可选择适配器(Adapter)模式和桥接(Bridge)模式来设计该模块。【4 分】
结构图:【8 分】
Chart
- dc : DataCollection
+ display ()
...
dc
DataCollection
+ read ()
...
ExcelReader
+ getData ()
...
BarChart
PieChart
TxtDataCollection
+ display ()
+ display ()
...
...
+ read ()
...
ExcelDataCollection
- reader : ExcelReader
+ read ()
reader
...
DBDataCollection
+ read ()
...
【注:可以不用标注类里面的方法和属性。】
3. 结构图:【8 分】
UIComponent
+
+
+
+
add ()
remove ()
get ()
operation ()
...
Button
TextBox
+ operation ()
+ operation ()
...
...
Container
+
+
+
+
add ()
remove ()
get ()
operation ()
...
Form
Panel
+ operation ()
+ operation ()
【注: 可以不 用 标注 类里 面的方法和 属性, 也可以 将 Form 和 Panel 直接作 为
...
...
UIComponent 的子类,但必须分别持有对 UIComponent 的关联引用。】
2
组合模式的适用场景:【4 分,可酎情计分】
(1) 在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,客户
端可以一致地对待它们。
(2) 在一个使用面向对象语言开发的系统中需要处理一个树形结构。
(3) 在一个系统中能够分离出叶子对象和容器对象,而且它们的类型不固定,需要增加
一些新的类型。
4. 可选择观察者模式。【2 分】
观察者模式的定义:定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生
改变时,其相关依赖对象皆得到通知并被自动更新。【2 分】
结构图:【8 分】
Subject
- observers : ArrayList
+
+
addObserver (Observer obs)
cry ()
...
: void
: void
observers
Observer
+ response ()
: void
...
Cat
+ cry ()
: void
...
Mouse
Master
+ response ()
: void
+ response ()
...
...
: void
【注:可以不用标注类里面的方法和属性,抽象观察目标类 Subject 可以省略。】
5. 可选择策略模式。【2 分】
策略模式的定义:定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,
策略模式让算法独立于使用它的客户而变化。【2 分】
结构图:【8 分】
CinemaTicket
-
-
+
+
+
: double
: Discount
price
discount
getPrice ()
setPrice (double price)
setDiscount (Discount discount)
...
: double
: void
: void
discount
Discount
+ compute (double price)
: double
...
StudentDiscount
VIPDiscount
+ compute (double price)
: double
+ compute (double price)
: double
...
...
ChildrenDiscount
【注:可以不用标注类里面的方法和属性。】
...
+ compute (double price)
: double
3
Q
B
N
¨
…
0
ˆ
F
9
N
¨
˜
!
N
¨
6
¨
¡
6
¯
&
%
’
&
$
&
’
%
’
$
…
ˆ
F
4
N
¨
˜
!
N
¨
6
¨
¡
6
¯
!
F
!
.
0
4
A
6
˜
!
F
!
.
0
4
A
6
˜
æ
9
ˆ
5
,
8
˜
+
X
N
¨
˜
!
N
¨
6
¨
¡
6
¯
J
»
Q
?
˜
6
3
2
«
.
†
;
p
/
j
0
X
O
W
L
W
R
Q
D
U
U
D
\
0
X
O
W
L
W
R
Q
>
@
0
X
O
W
L
W
R
Q
J
H
W
,
Q
V
W
D
Q
F
H
U
D
Q
G
R
P
0
X
O
W
L
W
R
Q
L
Q
W
J
»
Q
?
0
X
O
W
L
W
R
Q
3
D
W
W
H
U
Q
_
»
Q
?
,
·
0
/
?
¨
J
»
2
«
X
3
+
5
]
X
9
L
J
Z
˛
»
¨
6
<
D
ı
N
«
8
>
|
K
*
…
1
*
6
F
¸
˛
»
¨
ƒ
A
F
+
|
¸
8
!
,
·
˛
»
¨
F
J
E
M
1
L
8
)
B
F
¸
˛
»
˜
0
X
O
W
L
W
R
Q
,
·
˛
)
.
1
†
;
L
P
S
R
U
W
M
D
Y
D
X
W
L
O
S
X
E
O
L
F
F
O
D
V
V
0
X
O
W
L
W
R
Q
^
˚
y
0
Z
4
+
X
Z
˛
»
S
U
L
Y
D
W
H
V
W
D
W
L
F
0
X
O
W
L
W
R
Q
>
@
D
U
U
D
\
^
Q
H
Z
0
X
O
W
L
W
R
Q
Q
H
Z
0
X
O
W
L
W
R
Q
Q
H
Z
0
X
O
W
L
W
R
Q
Q
H
Z
0
X
O
W
L
W
R
Q
‘
/
æ
9
·
F
P
-
S
U
L
Y
D
W
H
0
X
O
W
L
W
R
Q
^
‘
M
1
†
Ø
#
¨
L
¿
j
F
4
]
,
·
0
Z
˛
»
S
X
E
O
L
F
V
W
D
W
L
F
0
X
O
W
L
W
R
Q
J
H
W
,
Q
V
W
D
Q
F
H
^
U
H
W
X
U
Q
D
U
U
D
\
>
U
D
Q
G
R
P
@
‘
L
¿
j
+
O
@
0
Z
⁄
j
4
;
7
S
X
E
O
L
F
V
W
D
W
L
F
L
Q
W
U
D
Q
G
R
P
^
’
D
W
H
G
Q
H
Z
’
D
W
H
5
D
Q
G
R
P
U
D
Q
G
R
P
Q
H
Z
5
D
Q
G
R
P
L
Q
W
Y
D
O
X
H
0
D
W
K
D
E
V
U
D
Q
G
R
P
Q
H
[
W
,
Q
W
Y
D
O
X
H
Y
D
O
X
H
U
H
W
X
U
Q
Y
D
O
X
H
‘
S
X
E
O
L
F
V
W
D
W
L
F
Y
R
L
G
P
D
L
Q
6
W
U
L
Q
J
D
U
J
V
>
@
^
0
X
O
W
L
W
R
Q
P
P
P
P
P
0
X
O
W
L
W
R
Q
J
H
W
,
Q
V
W
D
Q
F
H
P
0
X
O
W
L
W
R
Q
J
H
W
,
Q
V
W
D
Q
F
H
P
0
X
O
W
L
W
R
Q
J
H
W
,
Q
V
W
D
Q
F
H
P
0
X
O
W
L
W
R
Q
J
H
W
,
Q
V
W
D
Q
F
H
6
\
V
W
H
P
R
X
W
S
U
L
Q
W
O
Q
P
P
6
\
V
W
H
P
R
X
W
S
U
L
Q
W
O
Q
P
P
6
\
V
W
H
P
R
X
W
S
U
L
Q
W
O
Q
P
P
‘
‘
ˇ
#
2
«
.
j
F
9
N
'
¨
?
–
˛
)
.
1
!
.
£
˙
%
6
6
˜
—
:
L
Q
G
R
Z
V
;
•
&
-
5
·
_
0
Z
A
5
·
¨
fl
+
X
4
8
Q
?
F
>
|
A
A
˜
ˇ
6
—
6
3
8
0
/
2
«
.
†
;
p
/
j
ˇ
6
—
I
L
O
H
/
L
V
W
$
E
V
W
U
D
F
W
)
L
O
H
^
D
E
V
W
U
D
F
W
‘
D
G
G
$
E
V
W
U
D
F
W
)
L
O
H
H
O
H
P
H
Q
W
U
H
P
R
Y
H
$
E
V
W
U
D
F
W
)
L
O
H
H
O
H
P
H
Q
W
G
L
V
S
O
D
\
Y
R
L
G
Y
R
L
G
Y
R
L
G
,
P
D
J
H
)
L
O
H
I
L
O
H
1
D
P
H
6
W
U
L
Q
J
,
P
D
J
H
)
L
O
H
6
W
U
L
Q
J
I
L
O
H
1
D
P
H
D
G
G
$
E
V
W
U
D
F
W
)
L
O
H
H
O
H
P
H
Q
W
U
H
P
R
Y
H
$
E
V
W
U
D
F
W
)
L
O
H
H
O
H
P
H
Q
W
G
L
V
S
O
D
\
Y
R
L
G
Y
R
L
G
Y
R
L
G
)
R
O
G
H
U
I
L
O
H
/
L
V
W
I
L
O
H
1
D
P
H
$
U
U
D
\
/
L
V
W
6
W
U
L
Q
J
)
R
O
G
H
U
6
W
U
L
Q
J
I
L
O
H
1
D
P
H
D
G
G
$
E
V
W
U
D
F
W
)
L
O
H
H
O
H
P
H
Q
W
U
H
P
R
Y
H
$
E
V
W
U
D
F
W
)
L
O
H
H
O
H
P
H
Q
W
G
L
V
S
O
D
\
Y
R
L
G
Y
R
L
G
Y
R
L
G
7
H
[
W
)
L
O
H
I
L
O
H
1
D
P
H
6
W
U
L
Q
J
7
H
[
W
)
L
O
H
6
W
U
L
Q
J
I
L
O
H
1
D
P
H
D
G
G
$
E
V
W
U
D
F
W
)
L
O
H
H
O
H
P
H
Q
W
U
H
P
R
Y
H
$
E
V
W
U
D
F
W
)
L
O
H
H
O
H
P
H
Q
W
G
L
V
S
O
D
\
Y
R
L
G
Y
R
L
G
Y
R
L
G
9
L
G
H
R
)
L
O
H
I
L
O
H
1
D
P
H
6
W
U
L
Q
J
9
L
G
H
R
)
L
O
H
6
W
U
L
Q
J
I
L
O
H
1
D
P
H
D
G
G
$
E
V
W
U
D
F
W
)
L
O
H
H
O
H
P
H
Q
W
U
H
P
R
Y
H
$
E
V
W
U
D
F
W
)
L
O
H
H
O
H
P
H
Q
W
G
L
V
S
O
D
\
Y
R
L
G
Y
R
L
G
Y
R
L
G
+
e
?
j
F
;
⁄
[
¶
›
Q
?
…
F
Q
?
1
y
A
A
Q
?
˜
ˇ
6
—
›
Q
?
5
·
.
ˇ
6
—
U
H
F
H
L
Y
H
U
,
Q
Y
R
N
H
U
&
R
P
P
D
Q
G
H
[
H
F
X
W
H
&
R
Q
F
U
H
W
H
&
R
P
P
D
Q
G
V
W
D
W
H
H
[
H
F
X
W
H
5
H
F
H
L
Y
H
U
D
F
W
L
R
Q
&
O
L
H
Q
W
U
H
F
H
L
Y
H
U
D
F
W
L
R
Q
›
Q
?
F
2
+
X
j
ˇ
6
—
3
+
5
M
0
?
–
6
B
’
"
r
B
3
+
X
6
5
…
B
’
"
r
f
6
5
@
6
V
¨
fl
˙
B
3
+
X
6
5
…
f
6
5
=
-
$
´
3
+
5
M
0
?
–
X
=
<
,
·
&
L
$
7
˚
B
’
"
r
ˆ
6
B
’
"
r
´
L
O
…
>
|
B
’
"
r
3
+
5
M
0
?
–
_
1
›
,
·
K
0
…
=
3
+
5
M
0
?
–
6
0
4
4
8
X
0
C
§
@
¿
›
˜
F
Q
?
5
·
.
ˇ
6
—
D
J
J
U
H
J
D
W
H
&
R
Q
F
U
H
W
H
$
J
J
U
H
J
D
W
H
F
U
H
D
W
H
,
W
H
U
D
W
R
U
$
J
J
U
H
J
D
W
H
F
U
H
D
W
H
,
W
H
U
D
W
R
U
&
R
Q
F
U
H
W
H
,
W
H
U
D
W
R
U
I
L
U
V
W
Q
H
[
W
K
D
V
1
H
[
W
F
X
U
U
H
Q
W
,
W
H
P
,
W
H
U
D
W
R
U
I
L
U
V
W
Q
H
[
W
K
D
V
1
H
[
W
F
X
U
U
H
Q
W
,
W
H
P
F
F
2
+
X
j
ˇ
6
—
A
L
0
Z
6
8
)
B
,
·
Ø
6
<
N
«
M
b
‡
,
·
G
>
/
j
M
0
?
–
j
0
Z
6
8
)
B
¸
J
/
F
}
¶
Ø
?
j
F
}
¶
=
<
,
·
6
8
5
·
¸
0
Z
5
0
,
·
¨
X
B
,
·
˛
)
2
«
]
j
=
<
,
·
6
8
5
·
¸
=
<
,
·
F
}
¶
Ø
?
¨
6
<
g
1
0
8
$
W
‘
B
˜
F
fl
}
fl
+
X
F
D
V
H
…
L
I
1
y
&
B
,
·
A
A
Q
?
9
†
Ø
#
Q
?
ˆ
(
1
Q
?
ˆ
1
+
Q
?
1
y
˜
ˇ
6
—
;
M
F
J
E
1
+
Q
?
—
B
$
>
ˇ
6
—
†
X
0
Z
4
*
6
E
&
]
fl
+
X
J
/
Ø
?
¨
†
ˆ
ˆ
;
0
/
•
&
ˆ
(
[
F
H
O
•
&
1
y
¨
X
"
9
fl
+
X
1
+
Q
?
{
}
.
1
(
w
!
†
;
S
X
E
O
L
F
F
O
D
V
V
’
D
W
D
+
D
Q
G
O
H
U
^
«
«
S
X
E
O
L
F
Y
R
L
G
V
D
Y
H
’
D
W
D
L
Q
W
L
^
«
«
V
Z
L
W
F
K
^
F
D
V
H
fl
+
X
ˆ
E
U
H
D
N
F
D
V
H
fl
+
X
;
0
/
•
&
E
U
H
D
N
F
D
V
H
fl
+
X
(
[
F
H
O
•
&
E
U
H
D
N
«
«
‘
«
«
‘
«
«
‘
X
:
F
.
1
]
¨
g
1
X
B
3
+
X
’
D
W
D
+
D
Q
G
O
H
U
2
«
,
·
V
D
Y
H
’
D
W
D
Ø
#
&
¨
M
0
?
–
P
0
Z
¨
F
J
E
.
˚
fl
+
X
/
Ø
?
¨
X
.
1
]
6
*
)
,
·
˙
K
fl
=
r
,
·
V
Z
L
W
F
K
«
F
D
V
H
«
B
¨
,
8
$
V
D
Y
H
’
D
W
D
Ø
#
M
h
˛
W
¨
=
Y
5
$
…
#
{
B
˜
L
!
{
F
¨
†
M
0
?
–
˛
—
,
·
Ø
?
F
M
0
?
–
i
$
.
1
¨
ı
N
«
˛
—
,
·
F
D
V
H
B
¨
F
¶
0
L
ˇ
I
˜
!
fl
+
X
1
+
Q
?
F
>
|
G
·
˜
X
1
+
Q
?
]
¨
A
6
!
0
/
Ø
?
1
>
ı
X
0
Z
§
,
·
1
+
2
«
]
¨
g
1
J
‚
)
B
1
+
2
«
5
F
0
;
¨
F
J
E
G
}
5
•
&
6
§
1
+
2
«
2
«
=
X
ƒ
]
¨
†
M
0
?
–
i
F
˛
—
1
+
2
«
M
0
i
G
}
5
•
&
£
¨
N
«
i
$
.
1
¨
F
J
E
1
+
Q
?
G
·
>
,
·
.
1
(
w
!
†
;
)
‡
2
«
S
X
E
O
L
F
F
O
D
V
V
’
D
W
D
+
D
Q
G
O
H
U
^
S
U
L
Y
D
W
H
6
W
U
D
W
H
J
\
V
W
U
D
W
H
J
\
S
X
E
O
L
F
Y
R
L
G
V
H
W
6
W
U
D
W
H
J
\
6
W
U
D
W
H
J
\
V
W
U
D
W
H
J
\
^
W
K
L
V
V
W
U
D
W
H
J
\
V
W
U
D
W
H
J
\
‘
S
X
E
O
L
F
Y
R
L
G
V
D
Y
H
’
D
W
D
^
V
W
U
D
W
H
J
\
V
D
Y
H
’
D
W
D
‘
‘
S
X
E
O
L
F
D
E
V
W
U
D
F
W
F
O
D
V
V
6
W
U
D
W
H
J
\
B
1
+
2
«
^
S
X
E
O
L
F
D
E
V
W
U
D
F
W
Y
R
L
G
V
D
Y
H
’
D
W
D
‘
S
X
E
O
L
F
F
O
D
V
V
’
%
6
W
U
D
W
H
J
\
H
[
W
H
Q
G
V
6
W
U
D
W
H
J
\
§
1
+
2
«
^
S
X
E
O
L
F
Y
R
L
G
V
D
Y
H
’
D
W
D
^
fl
+
X
ˆ
‘
‘
S
X
E
O
L
F
F
O
D
V
V
;
0
/
6
W
U
D
W
H
J
\
H
[
W
H
Q
G
V
6
W
U
D
W
H
J
\
§
1
+
2
«
^