java设计模式(创建型模式)之建造者模式

1.建造模式的本质

1.实现了对象组件的单独构造和装配这个模式的构建过程复杂情况下使用.
2.实现了构建和装配的解耦,不同构建起,相同的装配,可以做出不同的对象.相同的构建起,不同装配顺序也可以出现不同的对象,试下了构建算法/装配算法的解耦.实现了更好的复用

实例:
1.需要构建的实体对象

/**
     * 飞船
     * @author xzb_l
     *
     */

public class AirShip {
    private  OrbitalModule orbitalModule;//轨道舱
    private Engine engine;//发动舱
    private EscapeTower escapeTower; // 逃逸舱

    public AirShip() {
        // TODO Auto-generated constructor stub
    }

    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;
    }


    // 飞行方法
    public void fly(){
        System.out.println("飞");
    }

}

class OrbitalModule{
    private String name;
    public OrbitalModule() {
        // TODO Auto-generated constructor stub
    }

    public OrbitalModule(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 Engine() {
        // TODO Auto-generated constructor stub
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

class EscapeTower{
    private String name;
    public EscapeTower() {
        // TODO Auto-generated constructor stub
    }

    public EscapeTower(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

2.组件接口

/**
 * 构造者
 * @author xzb_l
 *
 */
public interface AirShipBuilder {
    Engine builderEngine();
    OrbitalModule builderOrbitalModule();
    EscapeTower builderEscapeTower();
}

3. 组件结合工厂模式实现产品对象
Engine OrbitalModule EscapeTower ..

4.构建组件

/**
 * 例如StringBuilder ,SaxBuilder....
 * @author xzb_l
 *
 */
public class ZhiHuiAirShipBuilder implements AirShipBuilder{

    @Override
    public Engine builderEngine() {
        System.out.println("构建智慧发动机");
        return new Engine("智慧发动机");
    }

    @Override
    public OrbitalModule builderOrbitalModule() {
        System.out.println("构建轨道");
        return new OrbitalModule("构建轨道舱");
    }

    @Override
    public EscapeTower builderEscapeTower() {
        System.out.println("构建逃逸舱");
        return new EscapeTower("构建逃逸舱");

    }

}

5.装配对象接口

/**
 * 组装
 */
public interface AirShipDirector {
    /**
     * 组装
     * @return
     */
    AirShip directorAirShip();
}

6.实现装配模式

/**
 * 装配
 * @author xzb_l
 *
 */
public class ZhiHuiAirShipDirector implements AirShipDirector{

    private AirShipBuilder builder;


    public ZhiHuiAirShipDirector(AirShipBuilder builder) {
        super();
        this.builder = builder;
    }

    @Override
    public AirShip directorAirShip() {
        Engine engine = builder.builderEngine();
        OrbitalModule orbitalModule = builder.builderOrbitalModule();
        EscapeTower escapeTower = builder.builderEscapeTower();

        AirShip ship = new AirShip();
        ship.setEngine(engine);
        ship.setOrbitalModule(orbitalModule);
        ship.setEscapeTower(escapeTower);

        return ship;
    }

}

6.测试建造对象

public class Client {
    public static void main(String[] args) {

        AirShipDirector director = new ZhiHuiAirShipDirector(new ZhiHuiAirShipBuilder());
        AirShip ship = director.directorAirShip();
        System.out.println(ship.getEngine());
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34898847/article/details/82666697