开发者社区> 啊啊啊88jdk> 正文

设计模式——Builder模式

简介: Builder模式 定义 将一个复杂对象的构建过程分离,使得同样的构建过程可以创建不同的结果。
+关注继续查看

Builder模式

定义

将一个复杂对象的构建过程分离,使得同样的构建过程可以创建不同的结果。

使用场景

  • 相同的方法,不同的执行顺序,产生不同的结果
  • 多个零件或者部件,可以组装到一个对象中,产生不同的结果
  • 初始化过程比较复杂,参数较多

举一个例子,Android对话框,就是Builder模式,像这样:

new AlertDialog.Builder(this)
        .setTitle("xxx")
        .setMessage("xxx")
        .create()
        .show();

本是一个相对复杂的对话框,通过链式编程构建出来。

实现

我们假设组装一台宝马轿车,它有品牌、型号、颜色。

public abstract class Car {
    // 品牌
    protected String mBrand;
    // 型号
    protected String mModel;
    // 颜色
    protected String mColor;

    public abstract void setBrand();

    public void setColor(String mColor) {
        this.mColor = mColor;
    }

    public void setModel(String model) {
        this.mModel = model;
    }

    @Override
    public String toString() {
        return "Car{" +
                "mBrand='" + mBrand + '\'' +
                ", mModel='" + mModel + '\'' +
                ", mColor='" + mColor + '\'' +
                '}';
    }
}

宝马车

public class BMWCar extends Car {

    @Override
    public void setBrand() {
        mBrand = "BMW";
    }
}

下面是Builder类,用来描述构建一台车需要哪些方法

public abstract class CarBuilder {

    public abstract CarBuilder buildBrand();

    public abstract CarBuilder buildModel(String model);

    public abstract CarBuilder buildColor(String color);

    public abstract Car create();
}

接下来来实现构建一台宝马车的Builder

public class BMWBuilder extends CarBuilder {

    Car car = new BMWCar();

    @Override
    public BMWBuilder buildBrand() {
        car.setBrand();
        return this;
    }

    @Override
    public BMWBuilder buildModel(String model) {
        car.setModel(model);
        return this;
    }

    @Override
    public BMWBuilder buildColor(String color) {
        car.setColor(color);
        return this;
    }

    @Override
    public Car create() {
        return car;
    }
}

这里的build方法都返回自身,用来链式调用。

调用

下面来构建一台红色的3系宝马轿车

new BMWBuilder()
        .buildBrand()
        .buildModel("3 Li")
        .buildColor("红色")
        .create();

如果你还想给车子添加个HUD、换个真皮座椅,只需要在Builder里添加对用的方法,构建的时候设置属性就可以了。

结论

Builder设计模式具有良好的封装性,构建者独立,方便扩展。
不足就是需要创建多个Builder。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
设计模式学习(十一):Builder建造者模式
设计模式学习(十一):Builder建造者模式
19 0
23种设计模式-创建模式-建造者模式(四)
23种设计模式-创建模式-建造者模式(四)
35 0
设计模式系列3 - builder模式
主要讲解建造者builder模式和实际应用的场景,基于java。
120 0
从零开始学设计模式(五):建造者模式(Builder Pattern)
在现实世界中的很多东西都是由很多组成部分构成的,比如房子它由砖头、水泥、石灰、钢筋等组成,即一个个简单的组成部分构成了一个复杂的房子。同样在软件系统中也存在很多复杂对象,而复杂对象的一些属性就相当于盖房子的材料,创建对象的过程就相当于盖房子的过程。由于组合部件的过程很复杂,因此,这些部件的组合过程往往被“外部化”到一个称作建造者的对象里,然后建造者返还一个已经建造完毕的完整产品对象,而用户无须关心该对象所包含的属性以及它们的组装方式,这就是建造者模式的模式动机。
84 0
【愚公系列】2021年12月 二十三种设计模式(三)-建造者模式(Builder Pattern)
【愚公系列】2021年12月 二十三种设计模式(三)-建造者模式(Builder Pattern)
54 0
从零开始学设计模式(四)—建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 建造者模式使用多个简单的对象一步一步构建成一个复杂的对象,这种类型的设计模式也属于创建型模式,它提供了一种创建对象的最佳方式。
939 0
C#设计模式之四建造者模式(Builder Pattern)【创建型】
原文:C#设计模式之四建造者模式(Builder Pattern)【创建型】 一、引言  今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern。
1568 0
+关注
啊啊啊88jdk
文章
问答
视频
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载