即将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
建造者模式的角色定义,在建造者模式中存在以下4个角色:
-
builder:为创建一个产品对象的各个部件指定抽象接口。
-
ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
-
Director:构造一个使用Builder接口的对象。
-
Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口
代码实例:
一个儿子,一个父亲,儿子中有父亲对象,构建一个构建器,产出儿子,最终可通过构建类构建出来儿子中所有的对象
/**
* 产品类,父亲的相关信息
* @author zhouzhongyi
*
*/
public class Father {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
/**
* 产品类,儿子的相关信息,包含父亲
* @author zhouzhongyi
*
*/
public class Son {
private String name;
private int age;
private Father father;//父亲
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Father getFather() {
return father;
}
public void setFather(Father father) {
this.father = father;
}
}
/**
* 构建器抽象接口
* @author zhouzhongyi
*
*/
public interface Ibuilder {
public Ibuilder name(String name);
Ibuilder age(int age);
Ibuilder father(String fatherName,int fatherAge);
Son build();
}
/**
* 构建器
* @author zhouzhongyi
*
*/
public class ConcreteBuilder implements Ibuilder{
// 需要构建的对象
private Son son = new Son();
public Ibuilder name(String name) {
son.setName(name);
return this;
}
public Ibuilder age(int age) {
son.setAge(age);
return this;
}
public Ibuilder father(String fatherName,int fatherAge) {
Father father = new Father();
father.setName(fatherName);
father.setAge(fatherAge);
son.setFather(father);
return this;
}
// 构建对象
public Son build() {
return son;
}
}
// 导演类/测试类
public class BuildDemo {
public static void main(String[] args) {
//创建一个构建器
Ibuilder builder = new ConcreteBuilder();
//构建一个儿子
Son son = builder.age(1).name("zhangsan").father("zhaosi",50).build();
System.out.println(son);
}
}