GOF23设计模式(四)

GOF设计模式之建造者模式(Builder)

建造者模式

接口方法

飞船接口

1
2
3
4
5
public interface AirShipBuilder {
Engine engineBuilder();
OrbitalModule orbitaModuleBuilder();
EscapeTower escapeTowerBuilder();
}

管理(建造)

1
2
3
public interface Director {
AirShip creatAirShip();
}

继承

继承飞船接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class XXAirShipBuilder implements AirShipBuilder{
@Override
public Engine engineBuilder() {
System.out.println("建造引擎");
return new Engine("XX牌引擎");
}
@Override
public OrbitalModule orbitaModuleBuilder() {
System.out.println("建造轨道舱");
return new OrbitalModule("XX牌轨道舱");
}
@Override
public EscapeTower escapeTowerBuilder() {
System.out.println("建造逃逸塔");
return new EscapeTower("XX牌逃逸塔");
}
}

继承建造接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class AirShipDirector implements Director{
private AirShipBuilder builder;

public AirShipDirector(AirShipBuilder builder) {
this.builder = builder;
}
@Override
public AirShip creatAirShip() {
Engine e=builder.engineBuilder();
OrbitalModule d=builder.orbitaModuleBuilder();
EscapeTower t=builder.escapeTowerBuilder();

AirShip ship=new AirShip();
ship.setEngine(e);
ship.setOrbitalModule(d);
ship.setEscapeTower(t);
return ship;
}
}

飞船类与相关组件

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
45
46
47
48
49
50
51
52
53
54
55
/**
* XX牌飞船
*/
public class AirShip {
private OrbitalModule orbitalModule; //轨道舱
private Engine engine; //发动机
private EscapeTower escapeTower; //逃逸塔
//这里可以加入相关方法

public OrbitalModule getOrbitalModule() {
return orbitalModule;
}
public void setOrbitalModule(OrbitalModule orbitalModule) {
this.orbitalModule = orbitalModule;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public EscapeTower getEscapeTower() {
return escapeTower;
}
public void setEscapeTower(EscapeTower escapeTower) {
this.escapeTower = escapeTower;
}
}
class OrbitalModule{
private String name;
public OrbitalModule(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class Engine{
private String name;
public Engine(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class EscapeTower{
private String name;
public EscapeTower(String name) {
this.name = name;
}
public String getName() {
return name;
}
}

测试

public class Client {
public static void main(String[] args) {
AirShipDirector director=new AirShipDirector(new XXAirShipBuilder());
AirShip ship=director.creatAirShip();
System.out.println(ship.getEngine().getName());
}
}```

结果

建造引擎
建造轨道舱
建造逃逸塔
XX牌引擎

原创技术分享,您的支持将鼓励我继续创作
0%