美文网首页
设计模式--Builder

设计模式--Builder

作者: AndroidTony | 来源:发表于2017-09-20 22:40 被阅读17次

标签(空格分隔): android 设计模式 builder


1 Builder设计模式概述

将复杂对象的构建与它的表示分离,使得同样的构建过程可以产生不容的表示。即通过一个专门的Builder的对象来构建新的对象。

2 使用场景

  • 一般用于复杂对象的构建。
    例如,网络访问的对象需要传入多个参数,将参数类型设置为一个Config类,构建Config类的对象就可以使用Builder类。

3 三种构建对象方式的比较

3.1 通过构造函数传入

坏处:参数多的时候,编写代码的人要当心传错参数,查看代码的人不太容易理解传入参数的含义。不方便维护。即使是分多个构造函数传入不同的参数也是一样。

3.2 通过setter挨个构造

好处:易于阅读,并且可以只对有用的成员变量赋值;

缺点:

  • 不能使用final类型

  • 用户可能拿到不完整的对象。

3.3 Builder方式构造

  • 1内容
  • 在要构建的类的内部创建一个静态内部Builder类

  • 该静态内部类的字段与要创建的类保持一致

  • Builder类的构造方法传入初始化必须的参数(final类型)

  • Builder类提供setter方法,返回自身this

  • 要构建的类的构造方法传入Builder类的实例

  • Builder类提供build方法,调用要构建的类的构造方法,返回要构建的类的实例。

  • 2核心思想

变种 Builder 模式目的在于减少对象创建过程中引入的多个构造函数、可选参数以及多个 setter 过度使用导致的不必要的复杂性。同时某些参数如果用户没有设置,可以有默认值。

  • 3好处
  • 链式调用,优雅好看

  • 先赋值,后创建对象,保证对象的完整性。

  • 4代码

public class Person {

//固定不变的对象,一般变量需要声明为 final

private final String mName;    //必选,final 类型需要在 构造器中初始化,不允许不初始化它的构造器存在

private String mLocation;      //可选

private String mJob;            //可选

private String mHabit;          //可选

/**

* 构造方法的参数是它的 静态内部类,使用静态内部类的变量一一赋值

* @param builder

*/

public Person(Builder builder) {

this.mName = builder.mName;

this.mLocation = builder.mLocation;

this.mJob = builder.mJob;

this.mHabit = builder.mHabit;

}

/**

* Person 的静态内部类,成员变量和 Person 的一致

*/

public static class Builder{

private final String mName;    //必选,final 类型需要在 构造器中初始化,不允许不初始化它的构造器存在

private String mLocation;      //可选

private String mJob;            //可选

private String mHabit;          //可选

/**

* 含必选参数的构造方法

* @param name

*/

public Builder(String name) {

mName = name;

}

public Builder setLocation(String location) {

mLocation = location;

return this;

}

public Builder setJob(String job) {

mJob = job;

return this;

}

public Builder setHabit(String habit) {

mHabit = habit;

return this;

}

/**

* 最终构建方法,返回一个 PersonTree 对象,参数是当前 Builder 对象

* @return

*/

public PersonThree build(){

return new Person(this);

}

}

}

  • 5技巧

下载AS插件 Inner Builder,写好要构建的类的字段之后,直接 Generate构造Buidler

4 实际案例

android中的AlertDialog对象就是使用Builder模式来构建的。

new AlertDialog.Builder(self)
 .setTitle("标题") 
 .setMessage("简单消息框")
 .setPositiveButton("确定", null) 
 .show(); 

相关文章

网友评论

      本文标题:设计模式--Builder

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