Builder(建造者)模式

作者: SheHuan | 来源:发表于2016-09-19 11:01 被阅读450次

定义

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

只要包括以下角色:

Product 产品类 : 产品的抽象类。
Builder : 抽象类, 规范产品的组建,一般是由子类实现具体的组件过程。
ConcreteBuilder : 具体的构建器.
Director : 统一组装过程(可省略)。

使用场景

主要用于创建一些复杂的对象,将其内部的构建细节隐藏起来,使用者只需要按照约定好的规则做相应的配置来完成构建,然后将配置好的对象表示出来即可,构建和展示的过程相对独立。同时不同的配置会影响具体的构建过程,最终影响目标对象。

实现方式

1、在Android中我们经常使用AlertDialog就是基于Builder模式实现的,可以通过如下的伪码来描述其使用过程

new DstObject.Builder().setA("A").setB("B").setC('C').create().show();

接下来我们实现这个DstObject的构建与展示过程:

public class DstObject {
    String a;
    String b;
    char c;

    public void show(){
        Log.e("DstObject", "show-->" + a + b + c);
    }

    public static class Builder{
        String a;
        String b;
        char c;
        public Builder setA(String a){
            this.a = a;
            return this;
        }

        public Builder setB(String b){
            this.b = b;
            return this;
        }

        public Builder setC(char c){
            this.c = c;
            return this;
        }

        public DstObject create(){
            DstObject dstObject = new DstObject();
            dstObject.a = a;
            dstObject.b = b;
            dstObject.c = c;
            return dstObject;
        }
    }
}

PS:这里只是对描述AlertDialog的整体流程,不考虑细节问题。

再结合上边的使用代码看一下,我们通过Builder进行DstObject的构建,其中Builder类通过返回自身实现链式调用,完成具体的配置,并通过create()方法返回一个包含配置信息的DstObject对象,最后通过DstObject对象的show()方法完成最终的展示。

经典的Builder模式相对复杂,在实际中我们经常对经典Builder模式进行简化,例如这里的Builder类同时扮演了文章开始提到的Builder、ConcreteBuilder、Director的角色,简化了Builder模式的设计。

2、在上边我们通过Builder模式描述了对象的构建与表示过程,其实通过Builder模式还可以进行一些初始化操作,比如要实现一个ImageLoader,我们可以先对ImageLoader对象做一些初始化配置,然后再进行image加载操作,例如:

ImageLoaderConfig config = new ImageLoaderConfig.Builder()
                .setA("A")
                .setB("B")
                .setC('C').create();

        ImageLoader.getInstance().init(config);

这样就完成了ImageLoader的初始化配置。
ImageLoaderConfig类就是用来对ImageLoader进行配置的,它和上边的DstObject类非常类似:

public class ImageLoaderConfig {
    String a = "a";
    String b = "b";
    char c = 'c';

    public static class Builder{
        String a;
        String b;
        char c;
        public Builder setA(String a){
            this.a = a;
            return this;
        }

        public Builder setB(String b){
            this.b = b;
            return this;
        }

        public Builder setC(char c){
            this.c = c;
            return this;
        }

        public ImageLoaderConfig create(){
            ImageLoaderConfig config = new ImageLoaderConfig();
            config.a = a;
            config.b = b;
            config.c = c;
            return config;
        }
    }
}

ImageLoader类的大致结构如下:

public class ImageLoader {
    private ImageLoaderConfig mConfig;

    private ImageLoader() {
    }

    public static ImageLoader getInstance() {
        return SingletonHolder.instance;
    }

    private static class SingletonHolder {
        private static final ImageLoader instance = new ImageLoader();
    }

    public void init(ImageLoaderConfig config) {
        mConfig = config;
    }

    public void load() {
        //start load image
    }
}

通过Builder模式我们将配置过程从ImageLoader类中隔离出来,如果不使用Builder模式,就可能需要在ImageLoader中添加各种set方法。

小结

使用Builder模式,将初始的构建过程和最终的表示相互隔离,降低它们之间的耦合性,方便各自的扩展。同时使代码具有良好的封装性,将具体的实现细节隐藏,易于对外操作。

相关文章

  • 设计模式(四):建造者模式

    建造者模式(Builder Pattern) 建造者模式(Builder Pattern)将一个复杂的构建与其表示...

  • 建造者模式

    建造者模式 创建型模式 Director、Builder、Product建造模型 Builder负责构建Produ...

  • 设计模式之建造者模式

    建造者模式的定义   建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:  Separat...

  • Builder pattern

    Builder pattern 这里所介绍的建造者模式不是GOF中介绍的建造者模式。GOF中的建造者模式主要用于抽...

  • 建造者模式

    建造者模式的定义 建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:Separate th...

  • 设计模式--建造者模式

    目录 本文的结构如下: 引言 什么是建造者模式 模式的结构 典型代码 代码示例 Builder模式变种 建造者模式...

  • Android 中的建造者模式

    Android 中的建造者模式 概述 建造者模式(Builder Pattern)也叫生成器模式,其定义如下:se...

  • 设计模式-构建者模式

    概念 建造者模式(英:Builder Pattern)是一种创建型设计模式,又名:生成器模式。GOF 给建造者模式...

  • 建造者模式-Builder(建造者)

    前言 在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是...

  • 五 建造者模式

    本文主要介绍创建型模式的最后一种————建造者模式。 概念 建造者模式(英:Builder Pattern)是一种...

网友评论

    本文标题:Builder(建造者)模式

    本文链接:https://www.haomeiwen.com/subject/vxsgettx.html