J.K Apr 6, 2013 2013-04-06T12:09:00+08:00
Apr 11, 2021 2021-04-11T21:54:27+08:00 3 min
【创建型】建造者模式
定义
1
2
3
4
5
6
7
8
9
10
11
12
| 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式的四个要点:
1.产品类,产品类可以是具体的类,也可以是抽象类与其实现类组成;
2.抽象建造者,可以是个抽象类或者接口,一般有创建产品方法和返回产品方法;
3.建造者,实现抽象建造者;
4.导演类,调用建造者来得到具体产品;
建造者模式优点:
1.建造者模式可以有效的封装变化,将业务逻辑封闭在导演类中,整体稳定性好;
2.扩展性好,有新的需求,加入新的建造者即可;
|
UML图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
| | | |
| Director |----→| abstractBuilder |
|_ _ _ _ _ _| |_ _ _ _ _ _ _ _ _|
↑
_ _ _ _ _|_ _ _ _
| |
| concreteBuilder |
|_ _ _ _ _ _ _ _ _|
|
|
_ _ _ _ _↓_ _ _ _
| |
| Product |
|_ _ _ _ _ _ _ _ _|
|
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| public class ComputerProduct{
private String cpu;
private String monitor;
public void setCpu(String cpu){
this.cpu = cpu;
}
public void setMonitor(String monitor){
this.monitor = monitor;
}
public void show(String computerName){
System.out.println( "We use "+cpu+" and "+monitor+" produce a computer called: "+computerName );
}
}
|
1
2
3
4
5
6
7
| public interface Builder{
public void createProduct();
public ComputerProduct getProduct();
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| public class BuilderX implements Builder{
private computerProduct = new ComputerProduct();
public void createProduct(String cpu, String monitor){
computerProduct.setCpu( cpu );
computerProduct.setMonitor( monitor );
}
public ComputerProduct getProduct(){
return computerProduct;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| public class Director{
private builder = new BuilderX();
public ComputerProduct getProductDell(){
builder.createProduct("intel","Samsung");
return builder.getProduct();
}
public ComputerProduct getProductMac(){
builder.createProduct("AMD","HP");
return builder.getProduct();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| public class Client{
public static void main(String[] args){
Director director = new Director();
ComputerProduct Dell = director.getProductDell();
Dell.show("Dell");
ComputerProduct Mac = director.getProductMac();
Mac.show("Mac");
}
}
运行结果:
We use intel and Samsung produce a computer called: Dell
We use AMD and HP produce a computer called: Mac
---------------------------------------------------------
|
应用
JDK中建造者模式的的应用:
java.lang.StringBuilder#append()
java.lang.StringBuffer#append()
java.sql.PreparedStatement
javax.swing.GroupLayout.Group#addComponent()