设计模式——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。

相关文章
|
5天前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
设计模式-------------工厂模式之工厂方法模式(创建型)
|
5天前
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
5天前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
|
5天前
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
12天前
|
设计模式 测试技术 Go
[设计模式]创建型模式-简单工厂模式
[设计模式]创建型模式-简单工厂模式
|
5天前
|
设计模式 人工智能 达摩院
设计模式的基础问题之模板模式在软件开发中的优势是什么
设计模式的基础问题之模板模式在软件开发中的优势是什么
|
5天前
|
设计模式 项目管理
设计模式的基础问题之生成器模式在项目管理应用的问题如何解决
设计模式的基础问题之生成器模式在项目管理应用的问题如何解决
|
5天前
|
设计模式 Java API
设计模式-------------静态/动态代理模式(结构型设计模式)
本文详细介绍了代理模式,包括其定义、应用场景、UML类图、代码实现和实际例子,阐述了静态代理和动态代理的区别以及它们的优缺点,展示了如何通过代理模式来控制对目标对象的访问并增强其功能。
|
29天前
|
设计模式 算法
交易链路设计原则&模式问题之中介者(Mediator)方法设计模式是什么,如何解决
交易链路设计原则&模式问题之中介者(Mediator)方法设计模式是什么,如何解决
|
29天前
|
C++ 设计模式
iLogtail设计模式问题之生成器模式的Product(产品)角色是什么
iLogtail设计模式问题之生成器模式的Product(产品)角色是什么