java设计模式之建造者模式

建造者模式

定义:建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
在建造者模式中,角色分指导者(Director)建造者(Builder): 用户联系指导者, 指导者指挥建造者, 最后得到产品. 建造者模式可以强制实行一种分步骤进行的建造过程.
这里写图片描述

适用的范围

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
  • 当构造过程必须允许被构造的对象有不同表示时

实例

我一直觉得文字上的语言并不能很快的让学习者深刻理解其中的逻辑,就贴合一个例子来探明其中的关系。

需求现在需要生产一批汽车,其中有卡车,小轿车,和客车。那么先分析共性,卡车,小轿车和客车的组成部分都有车轮,车壳和底盘(当然实际情况不止这三个~)那好,我们一步一步来做;

  • 1 我们明确了一个车的共性,那就不妨先创建一个Car的对象
/**
 * Created by melo on 2017/2/8.
 * 共性Car对象
 */
public class Car {
    private String wheels;
    private String carShell;
    private String chassis;

    public String getWheels() {
        return wheels;
    }

    public void setWheels(String wheels) {
        this.wheels = wheels;
    }

    public String getCarShell() {
        return carShell;
    }

    public void setCarShell(String carShell) {
        this.carShell = carShell;
    }

    public String getChassis() {
        return chassis;
    }

    public void setChassis(String chassis) {
        this.chassis = chassis;
    }
}
  • 其次,有了共性car对象后,我们需要创建一个builder角色的CarBuilder接口来定义一个对象各个组成部分的接口
/**
 * Created by melo on 2017/2/8.
 * Builder创建者角色,定义一个对象各个组成部分的接口
 */
public interface CarBuilder {
    //车轮
    void buildWheels();

    //车壳
    void buildCarShell();

    //底盘
    void buildChassis();

    //返回car对象
    Car buildCar();

}
  • 那么有了builder创建者和car对象的接口后,我们需要一个指挥builder进行创建的指挥者Director
/**
 * Created by melo on 2017/2/8.
 * Director角色,指挥创建car对象
 */
public class CarDirector {
    //传入创建者,Director指挥其进行对象的创建
    public Car constructCar(CarBuilder cb) {
        cb.buildCarShell();
        cb.buildChassis();
        cb.buildWheels();
        return cb.buildCar();
    }
}
  • 好了,到目前为止我们所需要的基本条件已经做完了,那么我们就随心所欲的来生产一台自己的小轿车吧
/**
 * Created by melo on 2017/2/8.
 * 构造小轿车
 */
public class SmallCarBuilder implements CarBuilder {
    Car mCar;

    public SmallCarBuilder(){
        mCar=new Car();
    }

    @Override
    public void buildWheels() {
    }

    @Override
    public void buildCarShell() {
    }

    @Override
    public void buildChassis() {

    }

    @Override
    public Car buildCar() {
        return mCar;
    }
}
  • 好啦,看看效果吧~
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        CarDirector carDirector=new CarDirector();
        Car smallCar=carDirector.constructCar(new SmallCarBuilder());
        smallCar.setWheels("纯金车轮");
        smallCar.setCarShell("纯金车壳");
        smallCar.setChassis("纯金底盘");
        Log.i("tag","我终于拥有一台"+smallCar.getWheels()+","+
                smallCar.getCarShell()+","+smallCar.getChassis()+"的小轿车啦~");

    }
}

这里写图片描述


题外话

到这里,相信你也可以对建造者模式进行应用了,如果需要很长娴熟当然需要大量的时间与练习,因为建造者模式的变化形式多样,如果只是对单一种类的对象进行建造者模式应用,那么不需要进行构造,可自行去尝试。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值