File tree Expand file tree Collapse file tree 10 files changed +248
-0
lines changed
gof23/src/main/java/com/scma/gof23/建造者模式 Expand file tree Collapse file tree 10 files changed +248
-0
lines changed Original file line number Diff line number Diff line change
1
+ ### 定义:
2
+ > 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;
3
+ ### 主要作用:
4
+ > 在用户不知道对象的建造过程细节和情况下就可以直接创建复杂的对象
5
+ >
6
+ ``` java
7
+ 解释 用户只需要给出复杂对象的类型和内容,
8
+ 建造者模式负责按顺序创建复杂对象(把内部
9
+ 建造过程和细节隐藏起来)
10
+ ```
11
+
12
+
13
+ #### 例子
14
+ 工厂 : 负责制造汽车(组装过程和细节在工厂内)
15
+ 汽车购买者: 只需要说出型号 ,然后直接购买即可使用,不必关心车子是怎么组装的
Original file line number Diff line number Diff line change
1
+ package com .scma .gof23 .建造者模式 .demo01 ;
2
+ //抽象的建造者: 方法
3
+ public abstract class Builder {
4
+ abstract void buildA ();
5
+ abstract void buildB ();
6
+ abstract void buildC ();
7
+ abstract void buildD ();
8
+
9
+ abstract Product getProduct ();
10
+ }
Original file line number Diff line number Diff line change
1
+ package com .scma .gof23 .建造者模式 .demo01 ;
2
+
3
+ //指挥:核心 负责指挥乳沟构建一个工程
4
+ public class Director {
5
+ //worker是builder的具体实现。一个builder可能有多个不同的worker
6
+ public Product build (Builder builder ) {
7
+ builder .buildA ();
8
+ builder .buildB ();
9
+ builder .buildC ();
10
+ builder .buildD ();
11
+ return builder .getProduct ();
12
+ }
13
+ }
Original file line number Diff line number Diff line change
1
+ package com .scma .gof23 .建造者模式 .demo01 ;
2
+ //产品: 房子
3
+ public class Product {
4
+ private String buildA ;
5
+ private String buildB ;
6
+ private String buildC ;
7
+ private String buildD ;
8
+
9
+ public String getBuildA () {
10
+ return buildA ;
11
+ }
12
+
13
+ public void setBuildA (String buildA ) {
14
+ this .buildA = buildA ;
15
+ }
16
+
17
+ public String getBuildB () {
18
+ return buildB ;
19
+ }
20
+
21
+ public void setBuildB (String buildB ) {
22
+ this .buildB = buildB ;
23
+ }
24
+
25
+ public String getBuildC () {
26
+ return buildC ;
27
+ }
28
+
29
+ public void setBuildC (String buildC ) {
30
+ this .buildC = buildC ;
31
+ }
32
+
33
+ public String getBuildD () {
34
+ return buildD ;
35
+ }
36
+
37
+ public void setBuildD (String buildD ) {
38
+ this .buildD = buildD ;
39
+ }
40
+
41
+ @ Override
42
+ public String toString () {
43
+ return "Product{" +
44
+ "buildA='" + buildA + '\'' +
45
+ ", buildB='" + buildB + '\'' +
46
+ ", buildC='" + buildC + '\'' +
47
+ ", buildD='" + buildD + '\'' +
48
+ '}' ;
49
+ }
50
+ }
Original file line number Diff line number Diff line change
1
+ package com .scma .gof23 .建造者模式 .demo01 ;
2
+
3
+ public class Test {
4
+ public static void main (String [] args ) {
5
+ //指挥(包工头)
6
+ Director director = new Director ();
7
+
8
+ //指挥 具体的工人完成产品
9
+ Product build = director .build (new Worker ());
10
+ build .toString ();
11
+ }
12
+ }
Original file line number Diff line number Diff line change
1
+ package com .scma .gof23 .建造者模式 .demo01 ;
2
+
3
+ public class Worker extends Builder {
4
+ private Product product ;
5
+
6
+ public Worker () {
7
+ product = new Product ();
8
+ }
9
+
10
+ @ Override
11
+ void buildA () {
12
+ product .setBuildA ("地基" );
13
+ System .out .println ("地基" );
14
+ }
15
+
16
+ @ Override
17
+ void buildB () {
18
+ product .setBuildA ("钢筋工程" );
19
+ System .out .println ("钢筋工程" );
20
+ }
21
+
22
+ @ Override
23
+ void buildC () {
24
+ product .setBuildA ("铺电线" );
25
+ System .out .println ("铺电线" );
26
+ }
27
+
28
+ @ Override
29
+ void buildD () {
30
+ product .setBuildA ("粉刷墙壁" );
31
+ System .out .println ("粉刷墙壁" );
32
+ }
33
+
34
+ @ Override
35
+ Product getProduct () {
36
+ return product ;
37
+ }
38
+ }
Original file line number Diff line number Diff line change
1
+ package com .scma .gof23 .建造者模式 .demo02 ;
2
+
3
+ public abstract class Builder {
4
+ abstract Builder builderA (String msg );
5
+ abstract Builder builderB (String msg );
6
+ abstract Builder builderC (String msg );
7
+ abstract Builder builderD (String msg );
8
+
9
+ abstract Product getProduct ();
10
+ }
Original file line number Diff line number Diff line change
1
+ package com .scma .gof23 .建造者模式 .demo02 ;
2
+
3
+ public class Product {
4
+ private String BuilderA ="汉堡" ;
5
+ private String BuilderB ="可乐" ;
6
+ private String BuilderC ="薯条" ;
7
+ private String BuilderD ="甜点" ;
8
+
9
+ public String getBuilderA () {
10
+ return BuilderA ;
11
+ }
12
+
13
+ public void setBuilderA (String builderA ) {
14
+ BuilderA = builderA ;
15
+ }
16
+
17
+ public String getBuilderB () {
18
+ return BuilderB ;
19
+ }
20
+
21
+ public void setBuilderB (String builderB ) {
22
+ BuilderB = builderB ;
23
+ }
24
+
25
+ public String getBuilderC () {
26
+ return BuilderC ;
27
+ }
28
+
29
+ public void setBuilderC (String builderC ) {
30
+ BuilderC = builderC ;
31
+ }
32
+
33
+ public String getBuilderD () {
34
+ return BuilderD ;
35
+ }
36
+
37
+ public void setBuilderD (String builderD ) {
38
+ BuilderD = builderD ;
39
+ }
40
+
41
+ @ Override
42
+ public String toString () {
43
+ return "Product{" +
44
+ "BuilderA='" + BuilderA + '\'' +
45
+ ", BuilderB='" + BuilderB + '\'' +
46
+ ", BuilderC='" + BuilderC + '\'' +
47
+ ", BuilderD='" + BuilderD + '\'' +
48
+ '}' ;
49
+ }
50
+ }
Original file line number Diff line number Diff line change
1
+ package com .scma .gof23 .建造者模式 .demo02 ;
2
+
3
+ public class Test {
4
+ public static void main (String [] args ) {
5
+ //服务员
6
+ Worker worker = new Worker ();
7
+ Product product = worker .getProduct ();
8
+ System .out .println ( product .toString ());
9
+ }
10
+ }
Original file line number Diff line number Diff line change
1
+ package com .scma .gof23 .建造者模式 .demo02 ;
2
+
3
+ import com .sun .corba .se .spi .orbutil .threadpool .Work ;
4
+
5
+ public class Worker extends Builder {
6
+ private Product product ;
7
+
8
+ public Worker () {
9
+ product = new Product ();
10
+ }
11
+
12
+ @ Override
13
+ Builder builderA (String msg ) {
14
+ product .setBuilderA (msg );
15
+ return this ;
16
+ }
17
+
18
+ @ Override
19
+ Builder builderB (String msg ) {
20
+ product .setBuilderB (msg );
21
+ return this ;
22
+ }
23
+
24
+ @ Override
25
+ Builder builderC (String msg ) {
26
+ product .setBuilderC (msg );
27
+ return this ;
28
+ }
29
+
30
+ @ Override
31
+ Builder builderD (String msg ) {
32
+ product .setBuilderD (msg );
33
+ return this ;
34
+ }
35
+
36
+ @ Override
37
+ Product getProduct () {
38
+ return product ;
39
+ }
40
+ }
You can’t perform that action at this time.
0 commit comments