建造者模式:通过建造者的接口,提供创建元件对象的方法,然后根据组装者提供一个组装的方法将原件进行组装,并在组装方法中提供一个需要对象的属性和获取属性的方法;
以下是各个之间类图的关系
需求对象蓝图
package com.dasenlin.cn;
public class AirShip {
private OrbitalModel orbital;
private Engine engine;
private EscapeTower escape;
public void launch(){
System.out.println("调用发动机");
}
public AirShip() {
super();
// TODO Auto-generated constructor stub
}
public AirShip(OrbitalModel orbital, Engine engine, EscapeTower escape) {
super();
this.orbital = orbital;
this.engine = engine;
this.escape = escape;
}
public OrbitalModel getOrbital() {
return orbital;
}
public void setOrbital(OrbitalModel orbital) {
this.orbital = orbital;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public EscapeTower getEscape() {
return escape;
}
public void setEscape(EscapeTower escape) {
this.escape = escape;
}
}
class OrbitalModel{
private String name;
public OrbitalModel(String name) {
super();
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) {
super();
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) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
元件对象的构建蓝图方法
package com.dasenlin.cn;
public interface AirShipBuilder {
OrbitalModel buildOrbitalModel();
Engine buildEngine();
EscapeTower buildEscapeTower();
}
需要对象的构建蓝图方法
package com.dasenlin.cn;
public interface AirShipDirector {
AirShip createAirShip();
}
实现蓝图方法构建元件对象
package com.dasenlin.cn;
public class DasenlinAirShipBuilder implements AirShipBuilder{
@Override
public OrbitalModel buildOrbitalModel() {
System.out.println("构建大森林哥的轨道仓");
return new OrbitalModel("大森林哥的轨道仓");
}
@Override
public Engine buildEngine() {
System.out.println("构建大森林哥的引擎");
return new Engine("大森林的引擎");
}
@Override
public EscapeTower buildEscapeTower() {
System.out.println("构建大森林哥哥的逃逸塔");
return new EscapeTower("大森林的逃逸塔");
}
}
实现需求对象蓝图方法
package com.dasenlin.cn;
public class DasenlinAirShipDirector implements AirShipDirector{
private AirShipBuilder builder;
public DasenlinAirShipDirector(AirShipBuilder builder) {
super();
this.builder = builder;
}
@Override
public AirShip createAirShip() {
Engine en=builder.buildEngine();
EscapeTower et=builder.buildEscapeTower();
OrbitalModel om=builder.buildOrbitalModel();
AirShip air =new AirShip();
air.setEngine(en);
air.setEscape(et);
air.setOrbital(om);
return air;
}
}
客户端构建
package com.dasenlin.cn;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
AirShipDirector director = new DasenlinAirShipDirector(new DasenlinAirShipBuilder());
AirShip ship = director.createAirShip(); System.out.println(ship.getEngine().getName()+":"+ship.getEscape().getName()+":"+ship.getOrbital().getName());
ship.launch();
}
}