1.定义:
将一个复杂对象的创建与它的表示分离,这样可以使得同样的创建方式来构建不同的表示
2. 建造者模式通常包含4中元素:
1. Builder :抽象的接口,称为抽象建造者,用来规范产品各个组成部分的构建。这个接口之复杂对象组成部分的构建,并不涉及具体对象部件的创建
2. ConcreteBuilder : 实现Builder接口,称为具体建造者,具体化产品各个组成部分的构建。建造完成之后,提供产品的实例
3. Director: 调用建造者对象来构建复杂对象,在指导中涉及产品信息,只保证产品按一定的顺序创建
4. Product: 产品类,即要创建的复杂对象类
3. 示例代码:
产品类Product:
/**
* 产品类
* @author zqkj001
*
*/
public class Product {
private String part1;
private String part2;
public String getPart1() {
return part1;
}
public void setPart1(String part1) {
this.part1 = part1;
}
public String getPart2() {
return part2;
}
public void setPart2(String part2) {
this.part2 = part2;
}
}
抽象建造者类Builder:
/**
* 抽象建造者类
* @author zqkj001
*
*/
public interface Builder {
/**
* 产品零件构造方法1
*
*/
public void buildPart1();
/**
* 产品零件构造方法2
*
*/
public void buildPart2();
/**
* 产品返还
* @return
*/
public Product getResult();
}
具体建造者类 ConcreteBuilder:
/**
* 具体建造者类
* @author zqkj001
*
*/
public class ConcreteBuilder implements Builder{
private Product product=new Product();
@Override
public void buildPart1() {
product.setPart1("build part1...");
}
@Override
public void buildPart2() {
product.setPart2("build part2...");
}
@Override
public Product getResult() {
return product;
}
}
导演者类 Director:
/**
* 导演者类
* @author zqkj001
*
*/
public class Director {
/**
* 需要使用的当前建造者对象
*/
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
/**
* 产品构造方法,负责调用各个零件构造方法
*/
public void buildProduct(){
builder.buildPart1();
builder.buildPart2();
}
}
测试类:
public class BuilderTest {
public static void main(String[] args) {
Builder builder=new ConcreteBuilder();
Director director=new Director(builder);
director.buildProduct();
Product product=builder.getResult();
System.out.println(product.getPart1());
System.out.println(product.getPart2());
}
}
4. 使用建造者模式的场合和好处
a、建造者模式的好处:
1.使用建造者模式可以使客户端不必知道产品内部组成的细节。
2.具体的建造者类之间是相互独立的,对系统的扩展非常有利。
3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
b、使用场合:
1.创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
2.要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时。