Builder模式定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
最简单的Builder模式示例代码如下:
public class Person { private String name; private String age; private String title; public Person(Builder builder){ this.name = builder.name; this.age = builder.age; this.title = builder.title; } @Override public String toString() { return "Name: " + name + " Age: " + age + " Title: " + title; } static class Builder{ private String name; private String age; private String title; public Builder setName(String name){ this.name = name; return this; } public Builder setAge(String age){ this.age = age; return this; } public Builder setTitle(String title){ this.title = title; return this; } public Person create(){ return new Person(this); } } }
调用代码如下:
Person person = new Person.Builder().setName("hlbd") .setAge("36") .setTitle("Manager").create();
builder几个特征:
1. 定义一个静态内部类,名为Builder
2. Builder类和主体类有相同的成员变量,例如 name ,age, title
3. Builder通过几个setter方法设置成员变量,每个setter方法都返回Builder本身,即return this,使得setter方法可以链式调用
4. Builder类提供一个create方法,返回主体类的实例对象
Builder模式的优缺点
优点:
1. 良好的封装性,使用Builder模式(建造者模式)可以使客户端不必知道产品内部的细节
2. 建造者独立,容易扩展
缺点:
1. 会产生多余的Buidler对象,消耗内存
Android源码中,最常用的Builder模式就是AlertDialog.Builder,使用该Builder来构建复杂的AlertDialog对象。