在我们日常生活中,如构建一个飞船,一个手机,一栋建筑,都会有非常复杂的组装,这时候应该用到建造者模式
以建造一个飞船为例
案例:造小页飞船
1.飞船各部分元件
package com.littlepage.BuilderPattern; public interface AirShipBuilder {
Engine builderEngine();
OrbitalModule builderOrbitalModule();
Escape builderEscape();
}
2.飞船实体用来组装
package com.littlepage.BuilderPattern; public class AirShip {
private OrbitalModule orbitalModule;
private Engine engine;
private Escape escape; public void lauch(){
System.out.println("发射");
} 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 Escape getEscape() {
return escape;
}
public void setEscape(Escape escape) {
this.escape = escape;
} }
class OrbitalModule{
private String name; public OrbitalModule(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 Escape{
private String name; public Escape(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }
3.创造方法的接口
package com.littlepage.BuilderPattern;
/*
*组装飞船对象
*/
public interface AirShipDirector {
AirShip createAirship();
}
4.实现组件(小页飞船组件)
package com.littlepage.BuilderPattern; public class LittlePageShipBuilder implements AirShipBuilder{ @Override
public Engine builderEngine() {
System.out.println("页牌发动机");
return new Engine("页牌发动机");
} @Override
public OrbitalModule builderOrbitalModule() {
System.out.println("页牌逃逸塔");
return new OrbitalModule("页牌逃逸塔");
} @Override
public Escape builderEscape() {
System.out.println("页牌轨道舱");
return new Escape("页牌轨道舱");
} }
5.实体实现装配
package com.littlepage.BuilderPattern; public class LittlePageAirshipDirector implements AirShipDirector{
private AirShipBuilder builder; public LittlePageAirshipDirector(AirShipBuilder builder) {
this.builder = builder;
} @Override
public AirShip createAirship() {
Engine e=builder.builderEngine();
OrbitalModule om=builder.builderOrbitalModule();
Escape et=builder.builderEscape(); AirShip ship=new AirShip();
ship.setEngine(e);
ship.setOrbitalModule(om);
ship.setEscape(et);
return ship;
} }
6.客户端的串接(测试)
package com.littlepage.BuilderPattern; public class Client {
public static void main(String[] args) {
AirShipDirector dir=new LittlePageAirshipDirector(new LittlePageShipBuilder());
AirShip air=dir.createAirship();
System.out.println(air.getEngine());
air.lauch();
}
}