意图:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用性:
以下情况可以使用Builder模式
当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
当构造过程必须允许被构造的对象有不同表示时。
需要生成的产品对象的属性相互依赖。一个属性的赋值必须发生在另一个属性之后。
结构:
参与者:
Builder
——为创建一个Product对象的各个部分指定抽象接口ConcreteBuilder
——实现Builder的接口以构造和装配该产品的各个部件。
——定义并明确它所创建的表示
——提供一个检索产品的接口Director
——构造一个使用Builder接口的对象Product
——表示被构造的复杂对象,ConcreteBuilder创建该产品内部表示并定义它的装配过程。
代码如下:
package hello;
class Director
{
private Builder builder;
public Director(Builder builder)
{
this.builder = builder;
}
public void func()
{
builder = new ConcreteBuilder();
builder.buildPart1();
builder.buildPart2();
builder.getResult();
}
}
class Product
{
public Product()
{
}
}
interface Builder
{
public void buildPart1();
public void buildPart2();
public Product getResult();
}
class ConcreteBuilder implements Builder
{
private Product product = new Product() ;
@Override
public void buildPart1() {
System.out.println("this is buildpart1");
}
@Override
public void buildPart2() {
System.out.println("this is buildpart2");
}
@Override
public Product getResult() {
return product;
}
}
public class BuilderMethod {
public static void main(String[] args) {
ConcreteBuilder concreteBuilder=new ConcreteBuilder();
Director director=new Director(concreteBuilder);
director.func();
}
}