Java 建造者模式

建造者模式本质:

                分离了对象的各部分组件的单独构造和组装,从而可以构造出不同的复杂对象。

 适用场景:

               在某一个对象的构造过程十分复杂的情况下,可以使用。

模式特点:

              因为分离了对象的各部分组件的单独构造和组装,所以按相同的装配顺序,但是有不同的构造器的情况下,可以创建出不同的对象,还有如果有相同的构造器,但是按不同的装配顺序,也可以创建不同的对象。

 

建造者模式的角色:

             抽象建造者角色:抽象产品对象各个组成部分的建造

             真实建造者角色:针对不同的产品对象,具体化对象各部分的建造,在建造完成之后,提供对象各部分的实例。

             抽象组装者:抽象了对对象个部分的组装

             真实组装者:具体化对对象各种组成成分的组装,组装完成后,提供完整的产品实例。

            

接下来案例中,我们以建造者模式,创建沃尔沃汽车。

//汽车,我们的产品对象
public class Car {

    private Tyre tyre; //轮胎

    private Seat  seat; //座椅

    private Engine engine; //发动机

    public Tyre getTyre() {
        return tyre;
    }

    public void setTyre(Tyre tyre) {
        this.tyre = tyre;
    }

    public Seat getSeat() {
        return seat;
    }

    public void setSeat(Seat seat) {
        this.seat = seat;
    }

    public Engine getEngine() {
        return engine;
    }

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

 

     

//轮胎,汽车组成部分
public class Tyre {

    private String tyreName;

    public Tyre(String tyreName) {
        this.tyreName = tyreName;
        Log.d("partsName","tyreName="+tyreName);
    }

    public String getTyreName() {
        return tyreName;
    }

    public void setTyreName(String tyreName) {
        this.tyreName = tyreName;
    }
}

 

//座椅,汽车组成部分
public class Seat {

    private String seatName;

    public Seat(String seatName) {
        this.seatName = seatName;
        Log.d("partsName","seatName="+seatName);
    }

    public String getSeatName() {
        return seatName;
    }

    public void setSeatName(String seatName) {
        this.seatName = seatName;
    }
}
//发动机,汽车组成部分
public class Engine {
    private String engineName;

    public Engine(String engineName) {
        this.engineName = engineName;
        Log.d("partsName","engineName="+engineName);
    }

    public String getEngineName() {
        return engineName;
    }

    public void setEngineName(String engineName) {
        this.engineName = engineName;
    }
}
//抽象建造者,抽象产品对象各个组成部分的建造
public interface CarBuilder {
    Tyre buildTyre();
    Seat buildSeat();
    Engine buildEngine();
}
//具体化产品对象的各个组成部分的建造,在建造完毕之后,提供各个组成部分的对象的实例
public class ConcreteCarBuilder implements CarBuilder{
    @Override
    public Tyre buildTyre() {
        Log.d("partsName","构建汽车轮胎");
        return new Tyre("沃尔沃的轮胎");
    }

    @Override
    public Seat buildSeat() {
        Log.d("partsName","构建汽车座椅");
        return new Seat("沃尔沃的座椅");
    }

    @Override
    public Engine buildEngine() {
        Log.d("partsName","构建汽车发动机");
        return new Engine("沃尔沃的发动机");
    }
}
//抽象组装者,抽象化对产品的组装,在组装的过程中,不涉及产品组成部分的创建,只是负责各个组成部分的实例组装起来
public interface CarDirector {
    
    Car directCar();
}

 

//真实组装者,用建造者提供的各部分的组成成分实例,组成我们的产品
//不同的组装顺序,可能会出不同的产品
public class ConcreteCarDirector  implements CarDirector{

    private CarBuilder carBuilder;

    public ConcreteCarDirector(CarBuilder carBuilder) {
        this.carBuilder = carBuilder;
    }

   //用建造者提供的产品组成部分的实例,组装我们的产品,汽车
    @Override
    public Car directCar() {

        Tyre volvoTyre=carBuilder.buildTyre();
        Seat volvoSeat=carBuilder.buildSeat();
        Engine volvoEngine=carBuilder.buildEngine();

        Car volvoCar=new Car();
        volvoCar.setTyre(volvoTyre);
        volvoCar.setSeat(volvoSeat);
        volvoCar.setEngine(volvoEngine);
        return volvoCar;
    }
}
//实例化组装者
CarDirector   carDirector=new ConcreteCarDirector(new ConcreteCarBuilder());
//组装者组装汽车各部分实例,返回完整的汽车对象
Car volvoCar=carDirector.directCar();
Log.d("partsName","tyreName="+volvoCar.getTyre().getTyreName());
Log.d("partsName","seatName="+volvoCar.getSeat().getSeatName());
Log.d("partsName","engineName="+volvoCar.getEngine().getEngineName());

结果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值