场景
- 比如说构建一个完整的物品的时候,他由很多个小组件组成,组装的过程中有一个过程,这个过程叫装配
作用
- 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
何时使用
- 一些基本部件不会变,而其组合经常变化的时候
优点
- 建造者独立,易扩展
- 便于控制细节风险
实例
本实例以飞船为例,创建各种不同的飞创零件。
package xin.chen.create_type.builder;
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/8/16 11:25
* @Version:
* @Acton: 飞船
*/
public class AirShip {
private OrbitelModule orbitelModule; //轨道舱
private Engine engine; //发动机
private EscapeTower escapeTower; //逃逸船
public OrbitelModule getOrbitelModule() {
return orbitelModule;
}
public void setOrbitelModule(OrbitelModule orbitelModule) {
this.orbitelModule = orbitelModule;
}
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 OrbitelModule {
private String name;
public OrbitelModule(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Engine {
private String name;
public Engine(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class EscapeTower {
private String name;
public EscapeTower(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package xin.chen.create_type.builder;
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/8/16 11:43
* @Version:
* @Acton:
*/
public interface AirShipBuilder {
OrbitelModule builderOrbitelModule();
Engine builderEngine();
EscapeTower builderEscapeTower();
}
package xin.chen.create_type.builder;
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/8/16 11:48
* @Version:
* @Acton:
*/
public class XcAirShipBuilder implements AirShipBuilder {
@Override
public OrbitelModule builderOrbitelModule() {
System.out.println("构建轨道舱");
return new OrbitelModule("构建轨道舱");
}
@Override
public Engine builderEngine() {
System.out.println("构建发动机");
return new Engine("构建发动机");
}
@Override
public EscapeTower builderEscapeTower() {
System.out.println("构建逃逸船");
return new EscapeTower("构建逃逸船");
}
}
package xin.chen.create_type.builder;
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/8/16 11:44
* @Version:
* @Acton:
*/
public interface AisShipDirector {
AirShip createAirShip(); //组装飞船对象
}
package xin.chen.create_type.builder;
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/8/16 11:55
* @Version:
* @Acton:
*/
public class XcAisShipDirector implements AisShipDirector {
private AirShipBuilder builder;
public XcAisShipDirector(AirShipBuilder builder) {
this.builder = builder;
}
@Override
public AirShip createAirShip() {
OrbitelModule module = builder.builderOrbitelModule();
Engine engine = builder.builderEngine();
EscapeTower escapeTower = builder.builderEscapeTower();
AirShip ship = new AirShip();
ship.setOrbitelModule(module);
ship.setEngine(engine);
ship.setEscapeTower(escapeTower);
return ship;
}
}
package xin.chen.create_type.builder;
import xin.chen.create_type.builder.AirShip;
import xin.chen.create_type.builder.XcAirShipBuilder;
import xin.chen.create_type.builder.XcAisShipDirector;
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/8/16 13:40
* @Version:
* @Acton:
*/
public class TestBuilderDemo {
public static void main(String[] args){
XcAisShipDirector director = new XcAisShipDirector(new XcAirShipBuilder());
AirShip ship = director.createAirShip();
ship.getEngine();
ship.getEscapeTower();
ship.getOrbitelModule();
}
}
关系类图: