设计模式(三:建造者模式)

本文深入解析建造者模式,阐述其作用在于分离对象构建与装配过程,实现构建算法与装配算法的解耦,提升代码复用性。通过构建飞船的具体案例,展示了如何利用该模式创建复杂对象,以及在开发中如StringBuilder类、SQL的PreparedStatement等应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.建造者模式的作用:
1.分离了对象子组件的构建和装配,构建由Builder负责,装配由Director负责。。 从而可以构 造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。
2.由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象; 相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配 算法的解耦,实现了更好的复用。

2.代码案例:
需求:需要一个飞船!
需要一个飞船类
需要一个构造飞船的接口 (飞船的各个子组件)
需要一个构造飞船的实现类
需要一个装配飞船的接口
需要一个装配飞船的实现类

package com.example.shejimoshi.builder;

/**
 * 需要一个飞船的产品
 */
public class AirShip {
    //构建飞船需要这三个对象

    private OrbitalModule orbitalModule;
    private EscapeTower escapeTower;
    private Engine engine;
    public void biubiu()
    {
        System.out.println("飞船发射");
    }


    public OrbitalModule getOrbitalModule() {
        return orbitalModule;
    }

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

    public EscapeTower getEscapeTower() {
        return escapeTower;
    }

    public void setEscapeTower(EscapeTower escapeTower) {
        this.escapeTower = escapeTower;
    }

    public Engine getEngine() {
        return engine;
    }

    public void setEngine(Engine engine) {
        this.engine = engine;
    }
}

//轨道舱
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 EscapeTower{
    private String name;
    public EscapeTower(String name)
    {
        this.name=name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
package com.example.shejimoshi.builder;

/**
 * 构建飞船的子组件  接口
 */
public interface AirShipBuilder {

    //构建发动机
    Engine BuilderEngine();
    //构建轨道舱
    OrbitalModule BuilderOrbitalModule();
    //构建逃逸仓
    EscapeTower BuilderEscapeTower();
}

package com.example.shejimoshi.builder;

/**
 * 实现了构建飞船的子组件
 */
public class ZhuAirShipBuilder 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("逃逸塔");
    }
}

package com.example.shejimoshi.builder;

/**
 * 负责组装飞船对象 接口
 */
public interface AirShipDirector {

    /**
     * 组装飞船对象
     */
    AirShip dictotAirShip();
}

package com.example.shejimoshi.builder;

/**
 * 实现飞船的装配者
 */
public class ZhuAirShipDirector implements  AirShipDirector {

    private AirShipBuilder airShipBuilder;
    public ZhuAirShipDirector(AirShipBuilder airShipBuilder)
    {
        this.airShipBuilder=airShipBuilder;
    }
    @Override
    public AirShip dictotAirShip() {

        AirShip airShip =new AirShip();
        airShip.setEngine(airShipBuilder.BuilderEngine());
        airShip.setOrbitalModule(airShipBuilder.BuilderOrbitalModule());
        airShip.setEscapeTower(airShipBuilder.BuilderEscapeTower());
        return airShip;
    }
}

测试:

package com.example.shejimoshi.builder;

public class Test {

    public static void main(String[] args) {
        //我现在需要一个飞船
        //构造飞船的
        AirShipBuilder airShipBuilder =new ZhuAirShipBuilder();
        //组装飞船的
        AirShipDirector director = new ZhuAirShipDirector(airShipBuilder);

        //通过组装飞船可以得到一个飞船
                AirShip airShip= director.dictotAirShip();
        System.out.println(airShip.getEngine().getName());
        //调用发射方法 
        airShip.biubiu();
    }
}

开发中应用场景:
– StringBuilder类的append方法
– SQL中的PreparedStatement
– JDOM中,DomBuilder、SAXBuilder

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值