GOF23的一些总结(三)

来源:互联网 发布:指南针炒股软件诈骗 编辑:程序博客网 时间:2024/05/22 06:24

建造者模式:通过建造者的接口,提供创建元件对象的方法,然后根据组装者提供一个组装的方法将原件进行组装,并在组装方法中提供一个需要对象的属性和获取属性的方法;
以下是各个之间类图的关系
这里写图片描述

需求对象蓝图

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();     }}
0 0
原创粉丝点击