美文网首页Android开发
Builder建造者模式

Builder建造者模式

作者: johnnycmj | 来源:发表于2017-09-18 15:28 被阅读36次

建造者模式

1 定义

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

builder.png

2通用代码

  • Product :产品类。通常是实现了模板方法。
  • Builder: 抽象创建者。规范产品的组建,一般由子类来具体实现。
  • ConcreateBuilder: 具体创建者,并返回一组创建好的对象。
  • Director: 负责安排已有模块顺序,并通知Builder开始创建。
public class Product {
    public void doSomething(){

    }
}
public abstract class Builder {

    //设置产品的不同部分,以获得不同的产品
    protected abstract void builderPart1();

    protected abstract void builderPart2();

    //建造产品
    public abstract Product getProduct();
}
public class ConcreateBuilder extends Builder {

    private Product product = new Product();

    @Override
    protected void builderPart1() {

    }

    @Override
    protected void builderPart2() {

    }

    @Override
    public Product getProduct() {
        return product;
    }
}
public class Director {
    private Builder builder = new ConcreateBuilder();

    public Product getProductA(){
        builder.builderPart1();
        builder.builderPart2();

        return builder.getProduct();
    }
}

3适用场景

  • 相同方法,不同执行顺序产生不同事件结果。
  • 多个零部件,都可以装配到一个对象中,但是产生的运行结果不相同。
  • 产品类非常复杂,或者产品类调用顺序不同产生不同的结果。
  • 当初始化一个对象非常复杂,如参数多,且参数都有默认值。

4 特点

在现实开发过程,Director这个角色经常会被省略。而直接使用一个Builder来进行对象的组装,这个Builder通常为链式调用,它的关键是每个set方法都返回自身,即return this,这样setter就可以链式调用。

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

5 优点

  • 良好的封装性,使用建造者模式使客户端不必知道产品内部具体的实现。
  • 建造者独立,易于扩展。

6 缺点

会产生多于的Builder对象以及Director对象,消耗内存。

7 链式调用Builder模式

CustomerDialog.java

public class CustomerDialog {

    private String title;
    private String message;
    private String button;

    public void setTitle(String title){
        this.title  = title;
    }

    public void setMessage(String message){
        this.message = message;
    }

    public void setButton(String button){
        this.button = button;
    }

    @Override
    public String toString() {
        return "This dialog is [ title="+title+" , message="+message+" , button="+button+"]";
    }

    public String show(){
        return this.toString();
    }
}

DialogBuilder.java

public class DialogBuilder {

    private CustomerDialog dialog;


    public DialogBuilder(){
        dialog = new CustomerDialog();
    }

    public DialogBuilder setTitle(String title){
        dialog.setTitle(title);
        return this;
    }

    public DialogBuilder setMessage(String message) {
        dialog.setMessage(message);
        return this;
    }

    public DialogBuilder setButton(String button) {
        dialog.setButton(button);
        return this;
    }

    public CustomerDialog create(){
        return dialog;
    }
}

DisplayDialog.java

public class DisplayDialog {

    public static DialogBuilder with(){
        return new DialogBuilder();
    }
}
@Test
public void testMain1(){
    CustomerDialog dialog =
            DisplayDialog.with()
            .setTitle("Dialog test")
            .setMessage("Dialog content")
            .setButton("Dialog button")
            .create();

    System.out.println(dialog.show());

}

相关文章

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

    建造者模式(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/gsdbsxtx.html