设计模式-建造者模式

最近在学习设计模式,之前断断续续的看过好多,自己也没有专门的练习和深入了解过,一直感觉对应设计模式相关的东西还是处于懵懂状态,这次下定决心好好的学习一下,所以做一个笔记用来督促自己。
资料收集与以下网站,如有冒犯,烦请告知

https://www.runoob.com/design-pattern/builder-pattern.html


定义

The intent of the Builder design pattern is to separate the construction of a complex object from its representation. By doing so the same construction process can create different representations.
将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示

简单说明

1.当一个类的构建过于复杂的时候,就可以考虑builder模式了。

上手试一下,还是用coder的例子吧,之前写了个简易的链式模式,这次学习一下传统写法。

1.程序员基类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

public class Coder {
private String name;//名称
private String language;//编程语言
private String coding;//编程能力
private String writeBug;//bug生产力

public void setName(String name) {
this.name = name;
}

public void setLanguage(String language) {
this.language = language;
}

public void setCoding(String coding) {
this.coding = coding;
}

public void setWriteBug(String writeBug) {
this.writeBug = writeBug;
}

public void draw() {
System.out.printf("%s程序员,使用%s编程语言,%s,%s。", name, language, coding, writeBug);
}
}

2. Builder类
1
2
3
4
5
6
7
8
9
10
11
public abstract class Builder {
public abstract void setName();

public abstract void setLanguage();

public abstract void setCoding();

public abstract void setWriteBug();

public abstract Coder getCoder();
}
3.创建一个Android程序员Builder
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class AndroidBuilder extends Builder {
private Coder coder = new Coder();

@Override
public void setName() {
coder.setName("Android");
}

@Override
public void setLanguage() {
coder.setLanguage("Java");
}

@Override
public void setCoding() {
coder.setCoding("写了三行代码");
}

@Override
public void setWriteBug() {
coder.setWriteBug("竟然没有bug");
}

@Override
public Coder getCoder() {
return coder;
}
}
4.指导者类
1
2
3
4
5
6
7
8
9
public class CoderDirector {//指导者类

public void makeCoder(Builder builder) {
builder.setName();
builder.setLanguage();
builder.setCoding();
builder.setWriteBug();
}
}

5.使用一下

1
2
3
4
5
6
7
8
9
public class Test {
public static void main(String[] args) {
CoderDirector director = new CoderDirector();//1
AndroidBuilder builder = new AndroidBuilder();//2
director.makeCoder(builder);//3
Coder coder = builder.getCoder();//4
coder.draw();
}
}

6.输出信息

1
Android程序员,使用Java编程语言,写了三行代码,竟然没用bug。