构造者模式

建造模式的本质:

-分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。从而可以构 造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。

-由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象; 相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配 算法的解耦,实现了更好的复用。

/**
 * 宇宙飞船
 */
public class AirShip {
    private OrbitalModule orbitalModule; //轨道舱
    private EngineModule engineModule;//发动机
    private EscapeTower escapeTower;//逃逸塔

    public AirShip(){

    }
    public void lauch(){
        System.out.println("-------------点火发射了!!!!---------------");
    }

    public AirShip(OrbitalModule orbitalModule, EngineModule engineModule, EscapeTower escapeTower) {
        this.orbitalModule = orbitalModule;
        this.engineModule = engineModule;
        this.escapeTower = escapeTower;
    }

    public OrbitalModule getOrbitalModule() {
        return orbitalModule;
    }

    public void setOrbitalModule(OrbitalModule orbitalModule) {
        this.orbitalModule = orbitalModule;
    }

    public EngineModule getEngineModule() {
        return engineModule;
    }

    public void setEngineModule(EngineModule engineModule) {
        this.engineModule = engineModule;
    }

    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 String getName() {
        return name;
    }

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

class EngineModule {
    private String name;

    public EngineModule(String name) {
        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) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

}

//-------------------------------
public interface AirShipBuilder {
    OrbitalModule builderOrbitalModule();
    EngineModule builderEngineModule();
    EscapeTower builderEscapeTower();


}
//-------------------------------
public class BubbleTgAirShipBuilder implements AirShipBuilder{
    @Override
    public OrbitalModule builderOrbitalModule() {

        System.out.println("----BubbleTgAirShipBuilder--------构建BubbleTg轨道舱--------------");
        return new OrbitalModule("这是构建好多了的BubbleTg轨道舱");
    }

    @Override
    public EngineModule builderEngineModule() {
        System.out.println("----BubbleTgAirShipBuilder--------构建BubbleTg发动机--------------");
        return new EngineModule("这是构建好多了的BubbleTg发动机");
    }

    @Override
    public EscapeTower builderEscapeTower() {
        System.out.println("----BubbleTgAirShipBuilder--------构建BubbleTg逃逸塔--------------");
        return new EscapeTower("这是构建好多了的BubbleTg逃逸塔");
    }
}
//-------------------------------
/**
 * 负责组装
 */
public interface AirShipDirector {

    /**
     * 组装飞船对象
     * @return
     */
    AirShip directAirShip();
}
//-------------------------------
/**
 *装配者,组装
 */
public class BubbleTgAirshipDirector implements AirShipDirector {
    private AirShipBuilder builder;

    public BubbleTgAirshipDirector(AirShipBuilder builder) {
        this.builder = builder;
    }

    @Override
    public AirShip directAirShip() {

        EngineModule e  = builder.builderEngineModule();
        OrbitalModule o  = builder.builderOrbitalModule();
        EscapeTower et  = builder.builderEscapeTower();
        System.out.println("--------BubbleTgAirshipDirector---开始装配组装-----------");
        //装配成飞船对象
        AirShip ship= new AirShip();
        ship.setEngineModule(e);
        ship.setEscapeTower(et);
        ship.setOrbitalModule(o);
        return ship;
    }
}
//-------------------------------
public class builderPatternTest01 {
    public static void builderPatternTest(){

        System.out.println("----------------------------构建者模式演示开始------------------------------------");
        AirShipDirector director = new BubbleTgAirshipDirector(new BubbleTgAirShipBuilder());
        AirShip ship = director.directAirShip();

        System.out.println(ship.getEngineModule().getName());
        System.out.println(ship.getEscapeTower().getName());
        System.out.println(ship.getOrbitalModule().getName());
        System.out.println("-------------------一切就绪------------------");
        ship.lauch();

        System.out.println("----------------------------构建者模式演示结束------------------------------------");

    }
}

 

开发中应用场景:

-StringBuilder类的append方法

-SQL中的PreparedStatement

-JDOM中,DomBuilder、SAXBuilder

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值