e2

滴滴侠,fai抖

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

宇宙飞船类及子组件类:

package builder_mode;

/**
 * 本类整合了飞船子组件
 */


/**
 * 宇宙飞船
 */
public class Airship {
    
    
    /**
     * 轨道舱
     */
    private OrbitalModule orbitalModule;
    
    
    /**
     * 发动机
     */
    private Engine engine;
    
    
    /**
     * 逃逸舱
     */
    private EscapeTower escapeTower;
    
    
    /**
     * 发射
     */
    public void launch(){
        engine.ignition();
        orbitalModule.openRest();
    }

    
    /**
     * 故障
     */
    public void fault(){
        escapeTower.popup();
    }
    
    
    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;
    }
    
}


/**
 * 轨道舱
 */
class OrbitalModule {

    private String name;

    public OrbitalModule(String name) {
        this.name = name;
    }

    
    /**
     * 开发休息平台
     */
    public void openRest(){
        System.out.println("开发休息平台!");
    }
    
    
    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 void ignition(){
        System.out.println("点火!");
    }
    
    
    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 void popup(){
        System.out.println("弹出!");
    }
    
    
    public String getName() {
        return name;
    }

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

 

构建者类型:

package builder_mode;

/**
 * 构建者类型
 */
public interface AirshipBuilder {

    /**
     * 构建发动机
     */
    Engine builderEngine();
    
    /**
     * 构建轨道舱
     */
    OrbitalModule builderOrbitalModule();

    /**
     * 构建逃逸舱
     */
    EscapeTower builderEscapeTower();
    
}

 

具体构建者:

package builder_mode;

/**
 * Xxx构建者, 具体构建者, 可以配合工厂模式
 */
public class XxxAirshipBuilder implements AirshipBuilder {

    
    /**
     * 构建Xxx牌发动机
     */
    @Override
    public Engine builderEngine() {
        System.out.println("构建Xxx牌发动机!");
        return new Engine("Xxx牌发动机");
    }

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

    
    /**
     * 构建Xxx牌逃逸舱
     */
    @Override
    public EscapeTower builderEscapeTower() {
        System.out.println("构建Xxx牌逃逸舱!");
        return new EscapeTower("Xxx牌逃逸舱");
    }

}

 

组装者类型:

package builder_mode;

/**
 * 组装者类型
 */
public interface AirshipDirector {
    
    /**
     * 组装宇宙飞船
     */
    Airship directAirShip();
    
}

 

具体组装者:

package builder_mode;

/**
 * Xxx组装者, 具体组装者
 */
public class XxxAirshipDirector implements AirshipDirector {

    
    /**
     * 持有具体构建者
     */
    private AirshipBuilder builder;
    
    
    /**
     * 构造器(传入具体构建者)
     * @param builder
     */
    public XxxAirshipDirector(AirshipBuilder builder) {
        this.builder = builder;
    }

    
    /**
     * 组装宇宙飞船
     * 建造者模式的核心方法, 客户不必关心具体的对象创建和对象组织
     */
    @Override
    public Airship directAirShip() {
        //创建子组件
        Engine e = builder.builderEngine();
        OrbitalModule o = builder.builderOrbitalModule();
        EscapeTower et = builder.builderEscapeTower();
        
        //装配成飞船对象
        Airship ship = new Airship();
        ship.setEngine(e);
        ship.setEscapeTower(et);
        ship.setOrbitalModule(o);
        
        return ship;
    }

}

 

类图:

 

测试类:

package builder_mode;

public class Client {

    public static void main(String[] args) {
        //创建XXX组装者(传入XXX构建者)
        AirshipDirector director = new XxxAirshipDirector(new XxxAirshipBuilder());
        
        //组装一个飞船对象出来
        Airship ship = director.directAirShip();
        
        
        //测试功能
        ship.launch();
        ship.fault();
    }
    
}

 

执行结果:

构建Xxx牌发动机!
构建Xxx牌轨道舱!
构建Xxx牌逃逸舱!
点火!
开发休息平台!
弹出!

 

 

谢谢声明出处!

转自: http://www.cnblogs.com/gscq073240/articles/7126374.html

 

posted on 2017-07-06 14:58  纯黑Se丶  阅读(272)  评论(0)    收藏  举报