设计模式建造者模式

本文最后更新于:2024年11月10日 下午

设计模式建造者模式

  • 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

  • 优点

    • 建造者独立,易扩展。
    • 便于控制细节风险。
  • 缺点

    • 产品必须有共同点,范围有限制。
    • 如内部变化复杂,会有很多的建造类。
  • 使用场景

    • 需要生成的对象具有复杂的内部结构。
    • 需要生成的对象内部属性本身相互依赖。

实例

  • 定义计算机抽象类 Computer与具体产品类 MacBook
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public abstract class Computer {

protected String mBoard;
protected String mDisplay;
protected String mOs;


protected Computer(){
}


public void setBoard(String board){
mBoard=board;
}

public void setDisplay(String display) {
this.mDisplay = display;
}


public abstract void setOs() ;


@Override
public String toString() {
return "Computer{" +
"mBoard='" + mBoard + '\'' +
", mDisplay='" + mDisplay + '\'' +
", mOs='" + mOs + '\'' +
'}';
}
}

public class MacBook extends Computer{


protected MacBook() {
}

@Override
public void setOs() {
mOs="Mac OS X 12";
}
}
  • 定义抽象 Builder与具体的 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
29
30
31
32
public abstract class Builder {

abstract void buildBoard(String board);
abstract void buildDisplay(String display);
abstract void buildOs();
abstract Computer build();

}

public class MacBookBuilder extends Builder {

private Computer mComputer=new MacBook();
@Override
void buildBoard(String board) {
mComputer.setBoard(board);
}

@Override
void buildDisplay(String display) {
mComputer.setDisplay(display);
}

@Override
void buildOs() {
mComputer.setOs();
}

@Override
Computer build() {
return mComputer;
}
}
  • 定义Director类,负责具体的构造 Computer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Director {
Builder mBuilser = null;


public Director(Builder builer) {
this.mBuilser = builer;
}


public void construct(String board,String display){
mBuilser.buildDisplay(display);
mBuilser.buildBoard(board);
mBuilser.buildOs();
}
}
  • 具体使用。
1
2
3
4
5
6
7
8
9
10
11
12
public class Test {

public static void main(String[] args){
Builder builder = new MacBookBuilder();
Director pcDirector = new Director(builder);
pcDirector.construct("英特尔主板","Retina显示器");

Computer computer = builder.build();
System.out.println(computer.toString());
}

}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!