基础编程学习快乐每一天
首页
留言
Siddim.com
当前位置:
首页
>
编程知识库
>
后端开发知识
>
设计模式是什么鬼(抽象工厂)
设计模式是什么鬼(抽象工厂)
阅读
1
2018-12-24
//本文作者:凸凹里歐
//本文收录菜单栏:《设计模式是什么鬼》专栏中
抽象工厂,意味着工厂的泛化,也就是说对多个工厂共通行为的抽取及概括。这和我们之前讲过的工厂方法模式十分类似,不同之处在于抽象工厂定义了更多的抽象行为,也就是多个工厂方法于抽象工厂中,其实它就是工厂方法的变种而已,所以建议读者先理解好工厂方法模式再回来看本章。
我们都知道,在工厂方法模式中的每个实际的工厂只定义了一个工厂方法,如果产品种类繁多,并且能进行归类分族的话,那么我们便可以顺理成章的定义多个工厂方法,如此可以避免过多的产品造成工厂泛滥的问题。比如宝驹汽车有轿车、
SUV
、跑车三个等级的产品,而奔痴汽车也同样包括以上三类等级产品,如此便形成了两个产品族,分别由宝驹工厂和奔痴工厂生产,每个工厂都有三个等级的生产线,以及后加入的四环汽车产品族同样可以符合这个规范模式。
我们以一款即时战略游戏来举例,假设游戏中有两个种族,地球人类与外星异形族,其中人类族拥有各种高科技军工制造技术,而怪兽异形族则是以血肉之躯的不断进化与人类抗衡。
在开始代码之前我们先对两族兵种进行分析归纳,我们看到人类兵工厂和怪兽兵工厂(母巢)产出兵种都可以被简单归纳为初、中、高三个等级,如下表所示。
好了,产品族已经定义清楚了,开始建立数据模型。首先定义产品的父类抽象兵种
Unit
,这里我们使用抽象类以达到属性延申遗传给子类的目的。
%
201public
%
20abstract
%
20class
%
20Unit
%
20
%
7B
//%
20
%
E5
%
85
%
B5
%
E7
%
A7
%
8D
%
0A
%
202
%
0A
%
203
%
20
%
20
%
20
%
20protected
%
20int
%
20attack
;//%
20
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
0A
%
204
%
20
%
20
%
20
%
20protected
%
20int
%
20defence
;//%
20
%
E9
%
98
%
B2
%
E5
%
BE
%
A1
%
E5
%
8A
%
9B
%
0A
%
205
%
20
%
20
%
20
%
20protected
%
20int
%
20health
;//%
20
%
E8
%
A1
%
80
%
E9
%
87
%
8F
%
0A
%
206
%
20
%
20
%
20
%
20protected
%
20int
%
20x
;//%
20
%
E6
%
A8
%
AA
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
0A
%
207
%
20
%
20
%
20
%
20protected
%
20int
%
20y
;//%
20
%
E7
%
BA
%
B5
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
0A
%
208
%
0A
%
209
%
20
%
20
%
20
%
20public
%
20Unit
(
int
%
20attack
,%
20int
%
20defence
,%
20int
%
20health
,%
20int
%
20x
,%
20int
%
20y
)%
20
%
7B
%
0A10
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20this
.
attack
%
20
=%
20attack
;%
0A11
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20this
.
defence
%
20
=%
20defence
;%
0A12
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20this
.
health
%
20
=%
20health
;%
0A13
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20this
.
x
%
20
=%
20x
;%
0A14
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20this
.
y
%
20
=%
20y
;%
0A15
%
20
%
20
%
20
%
20
%
7D
%
0A16
%
0A17
%
20
%
20
%
20
%
20public
%
20abstract
%
20void
%
20show
();%
0A18
%
0A19
%
20
%
20
%
20
%
20public
%
20abstract
%
20void
%
20attack
();%
0A20
%
0A21
%
7D
%
0A
不管是什么兵种必然会具有攻击力、防御力、血量体力值、坐标方位等等属性,我们都定义为
protected
以供子类继承,除此之外还有两个抽象方法显示和攻击。接下来是人类的产品族海军陆战队士兵、变形坦克和巨型战舰,它们分别对应初、中、高级兵种。
%
201public
%
20class
%
20Marine
%
20extends
%
20Unit
%
20
%
7B
//%
20
%
E6
%
B5
%
B7
%
E5
%
86
%
9B
%
E9
%
99
%
86
%
E6
%
88
%
98
%
E9
%
98
%
9F
%
E5
%
A3
%
AB
%
E5
%
85
%
B5
%
0A
%
202
%
0A
%
203
%
20
%
20
%
20
%
20public
%
20Marine
(
int
%
20x
,%
20int
%
20y
)%
20
%
7B
%
0A
%
204
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20super
(
6
,%
205
,%
2040
,%
20x
,%
20y
);%
0A
%
205
%
20
%
20
%
20
%
20
%
7D
%
0A
%
206
%
0A
%
207
%
20
%
20
%
20
%
20
@
Override
%
0A
%
208
%
20
%
20
%
20
%
20public
%
20void
%
20show
()%
20
%
7B
%
0A
%
209
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
A3
%
AB
%
E5
%
85
%
B5
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B
%
22
%
20
%
20x
%
20
%
20
%
22
,%
22
%
20
%
20y
%
20
%
20
%
22
%
5D
%
22
);%
0A10
%
20
%
20
%
20
%
20
%
7D
%
0A11
%
0A12
%
20
%
20
%
20
%
20
@
Override
%
0A13
%
20
%
20
%
20
%
20public
%
20void
%
20attack
()%
20
%
7B
%
0A14
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
A3
%
AB
%
E5
%
85
%
B5
%
E7
%
94
%
A8
%
E6
%
9C
%
BA
%
E5
%
85
%
B3
%
E6
%
9E
%
AA
%
E5
%
B0
%
84
%
E5
%
87
%
BB
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A
%
22
%
20
%
20attack
);%
0A15
%
20
%
20
%
20
%
20
%
7D
%
0A16
%
0A17
%
7D
%
0A
%
201public
%
20class
%
20Tank
%
20extends
%
20Unit
%
20
%
7B
//%
20
%
E5
%
9D
%
A6
%
E5
%
85
%
8B
%
0A
%
202
%
0A
%
203
%
20
%
20
%
20
%
20public
%
20Tank
(
int
%
20x
,%
20int
%
20y
)%
20
%
7B
%
0A
%
204
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20super
(
25
,%
20100
,%
20150
,%
20x
,%
20y
);%
0A
%
205
%
20
%
20
%
20
%
20
%
7D
%
0A
%
206
%
0A
%
207
%
20
%
20
%
20
%
20
@
Override
%
0A
%
208
%
20
%
20
%
20
%
20public
%
20void
%
20show
()%
20
%
7B
%
0A
%
209
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
9D
%
A6
%
E5
%
85
%
8B
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B
%
22
%
20
%
20x
%
20
%
20
%
22
,%
22
%
20
%
20y
%
20
%
20
%
22
%
5D
%
22
);%
0A10
%
20
%
20
%
20
%
20
%
7D
%
0A11
%
0A12
%
20
%
20
%
20
%
20
@
Override
%
0A13
%
20
%
20
%
20
%
20public
%
20void
%
20attack
()%
20
%
7B
%
0A14
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
9D
%
A6
%
E5
%
85
%
8B
%
E7
%
94
%
A8
%
E7
%
82
%
AE
%
E8
%
BD
%
B0
%
E5
%
87
%
BB
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A
%
22
%
20
%
20attack
);%
0A15
%
20
%
20
%
20
%
20
%
7D
%
0A16
%
0A17
%
7D
%
201public
%
20class
%
20Battleship
%
20extends
%
20Unit
%
20
%
7B
//%
20
%
E5
%
B7
%
A8
%
E5
%
9E
%
8B
%
E6
%
88
%
98
%
E8
%
88
%
B0
%
0A
%
202
%
0A
%
203
%
20
%
20
%
20
%
20public
%
20Battleship
(
int
%
20x
,%
20int
%
20y
)%
20
%
7B
%
0A
%
204
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20super
(
25
,%
20200
,%
20500
,%
20x
,%
20y
);%
0A
%
205
%
20
%
20
%
20
%
20
%
7D
%
0A
%
206
%
0A
%
207
%
20
%
20
%
20
%
20
@
Override
%
0A
%
208
%
20
%
20
%
20
%
20public
%
20void
%
20show
()%
20
%
7B
%
0A
%
209
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E6
%
88
%
98
%
E8
%
88
%
B0
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B
%
22
%
20
%
20x
%
20
%
20
%
22
,%
22
%
20
%
20y
%
20
%
20
%
22
%
5D
%
22
);%
0A10
%
20
%
20
%
20
%
20
%
7D
%
0A11
%
0A12
%
20
%
20
%
20
%
20
@
Override
%
0A13
%
20
%
20
%
20
%
20public
%
20void
%
20attack
()%
20
%
7B
%
0A14
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E6
%
88
%
98
%
E8
%
88
%
B0
%
E7
%
94
%
A8
%
E6
%
BF
%
80
%
E5
%
85
%
89
%
E7
%
82
%
AE
%
E6
%
89
%
93
%
E5
%
87
%
BB
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A
%
22
%
20
%
20attack
);%
0A15
%
20
%
20
%
20
%
20
%
7D
%
0A16
%
0A17
%
7D
%
0A
可以看到每个兵种的属性值都不同,我们在第
4
行的构造方法中调用了父类构造,直接赋值给遗传下来的属性,兵种越高攻击防御越高(当然制造成本也更高,这里我们忽略价格),而且都重写了自己的展示和攻击方法,行为差异化,当然也许坦克会具备其他特有的行为比如变形什么的(异形也许会打洞钻地),我们此处依然忽略,保持简约。然后定义外星生物家族的三级兵种,分别是:蟑螂、毒液、猛犸。
%
201public
%
20class
%
20Roach
%
20extends
%
20Unit
%
20
%
7B
//%
20
%
E5
%
A4
%
96
%
E6
%
98
%
9F
%
E8
%
9F
%
91
%
E8
%
9E
%
82
%
E5
%
85
%
B5
%
0A
%
202
%
0A
%
203
%
20
%
20
%
20
%
20public
%
20Roach
(
int
%
20x
,%
20int
%
20y
)%
20
%
7B
%
0A
%
204
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20super
(
5
,%
202
,%
2035
,%
20x
,%
20y
);%
0A
%
205
%
20
%
20
%
20
%
20
%
7D
%
0A
%
206
%
0A
%
207
%
20
%
20
%
20
%
20
@
Override
%
0A
%
208
%
20
%
20
%
20
%
20public
%
20void
%
20show
()%
20
%
7B
%
0A
%
209
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E8
%
9F
%
91
%
E8
%
9E
%
82
%
E5
%
85
%
B5
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B
%
22
%
20
%
20x
%
20
%
20
%
22
,%
22
%
20
%
20y
%
20
%
20
%
22
%
5D
%
22
);%
0A10
%
20
%
20
%
20
%
20
%
7D
%
0A11
%
0A12
%
20
%
20
%
20
%
20
@
Override
%
0A13
%
20
%
20
%
20
%
20public
%
20void
%
20attack
()%
20
%
7B
%
0A14
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E8
%
9F
%
91
%
E8
%
9E
%
82
%
E5
%
85
%
B5
%
E7
%
94
%
A8
%
E7
%
88
%
AA
%
E5
%
AD
%
90
%
E6
%
8C
%
A0
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A
%
22
%
20
%
20attack
);%
0A15
%
20
%
20
%
20
%
20
%
7D
%
0A16
%
0A17
%
7D
%
0A
%
201public
%
20class
%
20Spitter
%
20extends
%
20Unit
%
20
%
7B
//%
20
%
E5
%
A4
%
96
%
E6
%
98
%
9F
%
E6
%
AF
%
92
%
E6
%
B6
%
B2
%
E5
%
8F
%
A3
%
E6
%
B0
%
B4
%
E5
%
85
%
B5
%
0A
%
202
%
0A
%
203
%
20
%
20
%
20
%
20public
%
20Spitter
(
int
%
20x
,%
20int
%
20y
)%
20
%
7B
%
0A
%
204
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20super
(
10
,%
208
,%
2080
,%
20x
,%
20y
);%
0A
%
205
%
20
%
20
%
20
%
20
%
7D
%
0A
%
206
%
0A
%
207
%
20
%
20
%
20
%
20
@
Override
%
0A
%
208
%
20
%
20
%
20
%
20public
%
20void
%
20show
()%
20
%
7B
%
0A
%
209
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
8F
%
A3
%
E6
%
B0
%
B4
%
E5
%
85
%
B5
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B
%
22
%
20
%
20x
%
20
%
20
%
22
,%
22
%
20
%
20y
%
20
%
20
%
22
%
5D
%
22
);%
0A10
%
20
%
20
%
20
%
20
%
7D
%
0A11
%
0A12
%
20
%
20
%
20
%
20
@
Override
%
0A13
%
20
%
20
%
20
%
20public
%
20void
%
20attack
()%
20
%
7B
%
0A14
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
8F
%
A3
%
E6
%
B0
%
B4
%
E5
%
85
%
B5
%
E7
%
94
%
A8
%
E6
%
AF
%
92
%
E6
%
B6
%
B2
%
E5
%
96
%
B7
%
E5
%
B0
%
84
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A
%
22
%
20
%
20attack
);%
0A15
%
20
%
20
%
20
%
20
%
7D
%
0A16
%
0A17
%
7D
%
0A
%
201public
%
20class
%
20Mammoth
%
20extends
%
20Unit
%
20
%
7B
//%
20
%
E5
%
A4
%
96
%
E6
%
98
%
9F
%
E7
%
8C
%
9B
%
E7
%
8A
%
B8
%
E5
%
B7
%
A8
%
E5
%
85
%
BD
%
0A
%
202
%
0A
%
203
%
20
%
20
%
20
%
20public
%
20Mammoth
(
int
%
20x
,%
20int
%
20y
)%
20
%
7B
%
0A
%
204
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20super
(
20
,%
20100
,%
20400
,%
20x
,%
20y
);%
0A
%
205
%
20
%
20
%
20
%
20
%
7D
%
0A
%
206
%
0A
%
207
%
20
%
20
%
20
%
20
@
Override
%
0A
%
208
%
20
%
20
%
20
%
20public
%
20void
%
20show
()%
20
%
7B
%
0A
%
209
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E7
%
8C
%
9B
%
E7
%
8A
%
B8
%
E5
%
B7
%
A8
%
E5
%
85
%
BD
%
E5
%
85
%
B5
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B
%
22
%
20
%
20x
%
20
%
20
%
22
,%
22
%
20
%
20y
%
20
%
20
%
22
%
5D
%
22
);%
0A10
%
20
%
20
%
20
%
20
%
7D
%
0A11
%
0A12
%
20
%
20
%
20
%
20
@
Override
%
0A13
%
20
%
20
%
20
%
20public
%
20void
%
20attack
()%
20
%
7B
%
0A14
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E7
%
8C
%
9B
%
E7
%
8A
%
B8
%
E5
%
B7
%
A8
%
E5
%
85
%
BD
%
E7
%
94
%
A8
%
E7
%
8D
%
A0
%
E7
%
89
%
99
%
E9
%
A1
%
B6
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A
%
22
%
20
%
20attack
);%
0A15
%
20
%
20
%
20
%
20
%
7D
%
0A16
%
0A17
%
7D
%
0A
没什么好说的,大同小异。重点来了,接下来是我们的抽象工厂,概括出三个等级兵种的标准制造方法,我们这里以接口来定义它。
1public
%
20interface
%
20AbstractFactory
%
20
%
7B
%
0A2
%
0A3
%
20
%
20
%
20
%
20public
%
20Unit
%
20createLowClass
();//%
20
%
E5
%
B7
%
A5
%
E5
%
8E
%
82
%
E6
%
96
%
B9
%
E6
%
B3
%
95
%
EF
%
BC
%
9A
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E4
%
BD
%
8E
%
E7
%
BA
%
A7
%
E5
%
85
%
B5
%
E7
%
A7
%
8D
%
0A4
%
0A5
%
20
%
20
%
20
%
20public
%
20Unit
%
20createMidClass
();//%
20
%
E5
%
B7
%
A5
%
E5
%
8E
%
82
%
E6
%
96
%
B9
%
E6
%
B3
%
95
%
EF
%
BC
%
9A
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E4
%
B8
%
AD
%
E7
%
BA
%
A7
%
E5
%
85
%
B5
%
E7
%
A7
%
8D
%
0A6
%
0A7
%
20
%
20
%
20
%
20public
%
20Unit
%
20createHighClass
();//%
20
%
E5
%
B7
%
A5
%
E5
%
8E
%
82
%
E6
%
96
%
B9
%
E6
%
B3
%
95
%
EF
%
BC
%
9A
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E9
%
AB
%
98
%
E7
%
BA
%
A7
%
E5
%
85
%
B5
%
E7
%
A7
%
8D
%
0A8
%
7D
%
0A
可以看到,三个等级的接口意味着子类具体工厂必须具备初、中、高级三条生产线,它们同属一个家族,或者说是一个品牌的不同型号系列。理解了这一点后我们可以开始定义人类兵工厂的实现。
%
201public
%
20class
%
20HumanFactory
%
20implements
%
20AbstractFactory
%
7B
%
0A
%
202
%
0A
%
203
%
20
%
20
%
20
%
20
//%
E4
%
BA
%
BA
%
E6
%
97
%
8F
%
E5
%
B7
%
A5
%
E5
%
8E
%
82
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
0A
%
204
%
20
%
20
%
20
%
20private
%
20int
%
20x
;%
0A
%
205
%
20
%
20
%
20
%
20private
%
20int
%
20y
;%
0A
%
206
%
0A
%
207
%
20
%
20
%
20
%
20public
%
20HumanFactory
(
int
%
20x
,%
20int
%
20y
)%
20
%
7B
%
0A
%
208
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20this
.
x
%
20
=%
20x
;%
0A
%
209
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20this
.
y
%
20
=%
20y
;%
0A10
%
20
%
20
%
20
%
20
%
7D
%
0A11
%
0A12
%
20
%
20
%
20
%
20
@
Override
%
0A13
%
20
%
20
%
20
%
20public
%
20Unit
%
20createLowClass
()%
20
%
7B
%
0A14
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20unit
%
20
=%
20new
%
20Marine
(
x
,%
20y
);%
0A15
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E6
%
B5
%
B7
%
E5
%
86
%
9B
%
E9
%
99
%
86
%
E6
%
88
%
98
%
E9
%
98
%
9F
%
E5
%
91
%
98
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
22
);%
0A16
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20return
%
20unit
;%
0A17
%
20
%
20
%
20
%
20
%
7D
%
0A18
%
0A19
%
20
%
20
%
20
%
20
@
Override
%
0A20
%
20
%
20
%
20
%
20public
%
20Unit
%
20createMidClass
()%
20
%
7B
%
0A21
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20unit
%
20
=%
20new
%
20Tank
(
x
,%
20y
);%
0A22
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E5
%
8F
%
98
%
E5
%
BD
%
A2
%
E5
%
9D
%
A6
%
E5
%
85
%
8B
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
22
);%
0A23
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20return
%
20unit
;%
0A24
%
20
%
20
%
20
%
20
%
7D
%
0A25
%
0A26
%
20
%
20
%
20
%
20
@
Override
%
0A27
%
20
%
20
%
20
%
20public
%
20Unit
%
20createHighClass
()%
20
%
7B
%
0A28
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20unit
%
20
=%
20new
%
20Battleship
(
x
,%
20y
);%
0A29
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E5
%
B7
%
A8
%
E5
%
9E
%
8B
%
E6
%
88
%
98
%
E8
%
88
%
B0
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
22
);%
0A30
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20return
%
20unit
;%
0A31
%
20
%
20
%
20
%
20
%
7D
%
0A32
%
0A33
%
7D
%
0A
可以看到,这个兵工厂实现了人类兵种产品族的制造方法,分别对应三个等级兵种的制造方法,注意第
14
行的坐标初始化意思是在工厂的坐标位置上出兵。接下来是异形母巢的工厂实现。
%
201public
%
20class
%
20AlienFactory
%
20implements
%
20AbstractFactory
%
7B
%
0A
%
202
%
0A
%
203
%
20
%
20
%
20
%
20
//%
E5
%
A4
%
96
%
E6
%
98
%
9F
%
E8
%
99
%
AB
%
E6
%
97
%
8F
%
E5
%
B7
%
A5
%
E5
%
8E
%
82
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
0A
%
204
%
20
%
20
%
20
%
20private
%
20int
%
20x
;%
0A
%
205
%
20
%
20
%
20
%
20private
%
20int
%
20y
;%
0A
%
206
%
0A
%
207
%
20
%
20
%
20
%
20public
%
20AlienFactory
(
int
%
20x
,%
20int
%
20y
)%
20
%
7B
%
0A
%
208
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20this
.
x
%
20
=%
20x
;%
0A
%
209
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20this
.
y
%
20
=%
20y
;%
0A10
%
20
%
20
%
20
%
20
%
7D
%
0A11
%
0A12
%
20
%
20
%
20
%
20
@
Override
%
0A13
%
20
%
20
%
20
%
20public
%
20Unit
%
20createLowClass
()%
20
%
7B
%
0A14
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20unit
%
20
=%
20new
%
20Roach
(
x
,%
20y
);%
0A15
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E8
%
9F
%
91
%
E8
%
9E
%
82
%
E5
%
85
%
B5
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
22
);%
0A16
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20return
%
20unit
;%
0A17
%
20
%
20
%
20
%
20
%
7D
%
0A18
%
0A19
%
20
%
20
%
20
%
20
@
Override
%
0A20
%
20
%
20
%
20
%
20public
%
20Unit
%
20createMidClass
()%
20
%
7B
%
0A21
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20unit
%
20
=%
20new
%
20Spitter
(
x
,%
20y
);%
0A22
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E6
%
AF
%
92
%
E6
%
B6
%
B2
%
E5
%
85
%
B5
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
22
);%
0A23
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20return
%
20unit
;%
0A24
%
20
%
20
%
20
%
20
%
7D
%
0A25
%
0A26
%
20
%
20
%
20
%
20
@
Override
%
0A27
%
20
%
20
%
20
%
20public
%
20Unit
%
20createHighClass
()%
20
%
7B
%
0A28
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20unit
%
20
=%
20new
%
20Mammoth
(
x
,%
20y
);%
0A29
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E7
%
8C
%
9B
%
E7
%
8A
%
B8
%
E5
%
B7
%
A8
%
E5
%
85
%
BD
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
22
);%
0A30
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20return
%
20unit
;%
0A31
%
20
%
20
%
20
%
20
%
7D
%
0A32
%
0A33
%
7D
%
0A
显而易见,同样地分三级制造异形家族的产品系列,工厂准备完毕可以造兵打架了,运行游戏客户端。
%
201public
%
20class
%
20Client
%
20
%
7B
%
0A
%
202
%
20
%
20
%
20
%
20public
%
20static
%
20void
%
20main
(
String
%
5B
%
5D
%
20args
)%
20
%
7B
%
0A
%
203
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E6
%
B8
%
B8
%
E6
%
88
%
8F
%
E5
%
BC
%
80
%
E5
%
A7
%
8B
%
E3
%
80
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
22
);%
0A
%
204
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
8F
%
8C
%
E6
%
96
%
B9
%
E6
%
8C
%
96
%
E7
%
9F
%
BF
%
E6
%
94
%
92
%
E9
%
92
%
B1
%
E3
%
80
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
22
);%
0A
%
205
%
0A
%
206
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
//%
E7
%
AC
%
AC
%
E4
%
B8
%
80
%
E4
%
BD
%
8D
%
E7
%
8E
%
A9
%
E5
%
AE
%
B6
%
E9
%
80
%
89
%
E6
%
8B
%
A9
%
E4
%
BA
%
86
%
E5
%
9C
%
B0
%
E7
%
90
%
83
%
E4
%
BA
%
BA
%
E6
%
97
%
8F
%
0A
%
207
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
B7
%
A5
%
E4
%
BA
%
BA
%
E5
%
BB
%
BA
%
E9
%
80
%
A0
%
E4
%
BA
%
BA
%
E6
%
97
%
8F
%
E5
%
B7
%
A5
%
E5
%
8E
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
22
);%
0A
%
208
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20AbstractFactory
%
20factory
%
20
=%
20new
%
20HumanFactory
(
10
,%
2010
);%
0A
%
209
%
0A10
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20marine
%
20
=%
20factory
.
createLowClass
();%
0A11
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20marine
.
show
();%
0A12
%
0A13
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20tank
%
20
=%
20factory
.
createMidClass
();%
0A14
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20tank
.
show
();%
0A15
%
0A16
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20ship
%
20
=%
20factory
.
createHighClass
();%
0A17
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20ship
.
show
();%
0A18
%
0A19
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
//%
E5
%
8F
%
A6
%
E4
%
B8
%
80
%
E4
%
BD
%
8D
%
E7
%
8E
%
A9
%
E5
%
AE
%
B6
%
E9
%
80
%
89
%
E6
%
8B
%
A9
%
E4
%
BA
%
86
%
E5
%
A4
%
96
%
E6
%
98
%
9F
%
E6
%
97
%
8F
%
0A20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E5
%
B7
%
A5
%
E8
%
9C
%
82
%
E5
%
BB
%
BA
%
E9
%
80
%
A0
%
E5
%
A4
%
96
%
E6
%
98
%
9F
%
E8
%
99
%
AB
%
E6
%
97
%
8F
%
E5
%
B7
%
A5
%
E5
%
8E
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
22
);%
0A21
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20factory
%
20
=%
20new
%
20AlienFactory
(
200
,%
20200
);%
0A22
%
0A23
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20roach
%
20
=%
20factory
.
createLowClass
();%
0A24
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20roach
.
show
();%
0A25
%
0A26
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20spitter
%
20
=%
20factory
.
createMidClass
();%
0A27
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20spitter
.
show
();%
0A28
%
0A29
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20Unit
%
20mammoth
%
20
=%
20factory
.
createHighClass
();%
0A30
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20mammoth
.
show
();%
0A31
%
0A32
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20System
.
out
.
println
(%
22
%
E4
%
B8
%
A4
%
E6
%
97
%
8F
%
E5
%
BC
%
80
%
E5
%
A7
%
8B
%
E5
%
A4
%
A7
%
E6
%
B7
%
B7
%
E6
%
88
%
98
%
E3
%
80
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
22
);%
0A33
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20marine
.
attack
();%
0A34
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20roach
.
attack
();%
0A35
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20spitter
.
attack
();%
0A36
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20tank
.
attack
();%
0A37
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20mammoth
.
attack
();%
0A38
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20ship
.
attack
();%
0A39
%
0A40
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
/*%
0A41
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E6
%
B8
%
B8
%
E6
%
88
%
8F
%
E5
%
BC
%
80
%
E5
%
A7
%
8B
%
E3
%
80
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
0A42
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
8F
%
8C
%
E6
%
96
%
B9
%
E6
%
8C
%
96
%
E7
%
9F
%
BF
%
E6
%
94
%
92
%
E9
%
92
%
B1
%
E3
%
80
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
0A43
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
B7
%
A5
%
E4
%
BA
%
BA
%
E5
%
BB
%
BA
%
E9
%
80
%
A0
%
E4
%
BA
%
BA
%
E6
%
97
%
8F
%
E5
%
B7
%
A5
%
E5
%
8E
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
0A44
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E6
%
B5
%
B7
%
E5
%
86
%
9B
%
E9
%
99
%
86
%
E6
%
88
%
98
%
E9
%
98
%
9F
%
E5
%
91
%
98
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
0A45
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
A3
%
AB
%
E5
%
85
%
B5
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B10
,
10
%
5D
%
0A46
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E5
%
8F
%
98
%
E5
%
BD
%
A2
%
E5
%
9D
%
A6
%
E5
%
85
%
8B
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
0A47
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
9D
%
A6
%
E5
%
85
%
8B
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B10
,
10
%
5D
%
0A48
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E5
%
B7
%
A8
%
E5
%
9E
%
8B
%
E6
%
88
%
98
%
E8
%
88
%
B0
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
0A49
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E6
%
88
%
98
%
E8
%
88
%
B0
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B10
,
10
%
5D
%
0A50
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
B7
%
A5
%
E8
%
9C
%
82
%
E5
%
BB
%
BA
%
E9
%
80
%
A0
%
E5
%
A4
%
96
%
E6
%
98
%
9F
%
E8
%
99
%
AB
%
E6
%
97
%
8F
%
E5
%
B7
%
A5
%
E5
%
8E
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
0A51
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E8
%
9F
%
91
%
E8
%
9E
%
82
%
E5
%
85
%
B5
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
0A52
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E8
%
9F
%
91
%
E8
%
9E
%
82
%
E5
%
85
%
B5
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B200
,
200
%
5D
%
0A53
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E6
%
AF
%
92
%
E6
%
B6
%
B2
%
E5
%
85
%
B5
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
0A54
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
8F
%
A3
%
E6
%
B0
%
B4
%
E5
%
85
%
B5
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B200
,
200
%
5D
%
0A55
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
88
%
B6
%
E9
%
80
%
A0
%
E7
%
8C
%
9B
%
E7
%
8A
%
B8
%
E5
%
B7
%
A8
%
E5
%
85
%
BD
%
E6
%
88
%
90
%
E5
%
8A
%
9F
%
E3
%
80
%
82
%
0A56
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E7
%
8C
%
9B
%
E7
%
8A
%
B8
%
E5
%
B7
%
A8
%
E5
%
85
%
BD
%
E5
%
85
%
B5
%
E5
%
87
%
BA
%
E7
%
8E
%
B0
%
E5
%
9C
%
A8
%
E5
%
9D
%
90
%
E6
%
A0
%
87
%
EF
%
BC
%
9A
%
5B200
,
200
%
5D
%
0A57
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E4
%
B8
%
A4
%
E6
%
97
%
8F
%
E5
%
BC
%
80
%
E5
%
A7
%
8B
%
E5
%
A4
%
A7
%
E6
%
B7
%
B7
%
E6
%
88
%
98
%
E3
%
80
%
82
%
E3
%
80
%
82
%
E3
%
80
%
82
%
0A58
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
A3
%
AB
%
E5
%
85
%
B5
%
E7
%
94
%
A8
%
E6
%
9C
%
BA
%
E5
%
85
%
B3
%
E6
%
9E
%
AA
%
E5
%
B0
%
84
%
E5
%
87
%
BB
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A6
%
0A59
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E8
%
9F
%
91
%
E8
%
9E
%
82
%
E5
%
85
%
B5
%
E7
%
94
%
A8
%
E7
%
88
%
AA
%
E5
%
AD
%
90
%
E6
%
8C
%
A0
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A5
%
0A60
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
8F
%
A3
%
E6
%
B0
%
B4
%
E5
%
85
%
B5
%
E7
%
94
%
A8
%
E6
%
AF
%
92
%
E6
%
B6
%
B2
%
E5
%
96
%
B7
%
E5
%
B0
%
84
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A10
%
0A61
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E5
%
9D
%
A6
%
E5
%
85
%
8B
%
E7
%
94
%
A8
%
E7
%
82
%
AE
%
E8
%
BD
%
B0
%
E5
%
87
%
BB
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A25
%
0A62
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E7
%
8C
%
9B
%
E7
%
8A
%
B8
%
E5
%
B7
%
A8
%
E5
%
85
%
BD
%
E7
%
94
%
A8
%
E7
%
8D
%
A0
%
E7
%
89
%
99
%
E9
%
A1
%
B6
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A20
%
0A63
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
E6
%
88
%
98
%
E8
%
88
%
B0
%
E7
%
94
%
A8
%
E6
%
BF
%
80
%
E5
%
85
%
89
%
E7
%
82
%
AE
%
E6
%
89
%
93
%
E5
%
87
%
BB
%
EF
%
BC
%
8C
%
E6
%
94
%
BB
%
E5
%
87
%
BB
%
E5
%
8A
%
9B
%
EF
%
BC
%
9A25
%
20
%
0A64
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
%
20
*/%
0A65
%
20
%
20
%
20
%
20
%
7D
%
0A66
%
7D
%
0A
这里我们可以看到,不管玩家选择哪个种族,只要替换工厂实现就可以完成不同兵种的制造,假设玩家又需要一个新的种族,依然按照这种模式去实现一个新族工厂就可以了。
至此,我们用各族工厂对种类繁多的产品进行了划分、归类,产品虽然繁多,但总得有品牌、型号之分,以各族工厂和产品线划界,分而治之,横向拆分产品家族,纵向则拆分产品等级。
点击图片加入
Spring
交流群
↓↓↓
看完本文有收获?请转发分享给更多人
以上数据来源于网络,如有侵权,请联系删除。
上一篇:
架构设计&分布式&数据结构与算法面试题(2020最新版)
下一篇:
设计模式是什么鬼(建造者)
评论
(0)
提交
类别
基础编程学习
HTML
PHP
Python
编程知识库
后端开发知识
热门文章
Java并发中的同步容器与并发容器,你了解多少?
Innodb中的事务隔离级别和锁的关系,难倒一半面试者!
SpringBoot + minio实现分片上传、秒传、续传
面试官:你知道消息队列如何保证数据不丢失吗?
JAVA知识 Java8新特性
面试官:谈谈为什么要限流,有哪些限流方案?
说说动态代理与静态代理区别
面试官:思考Tomcat 类加载器为什么要违背双亲委派模型?
boot-admin 基于SpringBoot的后台权限管理系统,可作为脚手架,用于快速搭建项目
SpringBoot+Vue+App+硬件实现智能家居系统项目