创建者模式,和工厂模式一样,作用在于将对象的创建过程与使用过程解耦。

下面介绍一种使用静态内部类实现的创建者模式。

要创建一个业务对象,必须使用该对象的模板来把属性设置好,最后使用模板来创建业务对象。

package com.liyao;

public class Person {
private int id;
private int age;
private String name;
private String address;

public Person(Setter setter){
id = setter.id;
age = setter.age;
name = setter.name;
address = setter.address;
}

public static class Setter{
private int id;
private int age;
private String name;
private String address;

static Setter create(){
return new Setter();
}

public Person build(){
return new Person(this);
}

public Setter setName(String name) {
this.name = name;
return this;
}

public Setter setAge(int age) {
this.age = age;
return this;
}

public Setter setAddress(String address) {
this.address = address;
return this;
}

public Setter setId(int id) {
this.id = id;
return this;
}
}

@Override
public String toString() {
return "Person{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}

客户端:

public class App 
{
public static void main( String[] args )
{
Person person = Person.Setter
.create()
.setAddress("yuanping")
.setAge(12)
.setId(1)
.setName("liyao").build();

System.out.println(person);
}
}

这种方式的好处在于:

首先继承了创建者模式的优点,解耦;

第二,创建的过程很紧凑,使用了链式编程的模式,把创建过程集中到一起,防止各种设置值的方法散落在各个地方,可读性更好。

第三,setter可以复用,相同的创建过程只要一个模板,一个setter即可。