java设计模式之建造者

概念: 

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

实例:

1、Builder:为创建一个产品对象的各个部件指定抽象接口。
2、ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
3、Director:构造一个使用Builder接口的对象,指导构建过程。
4、Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

1.创建接口Builder

public interface Builder {
public void buildPart1();
public void buildPart2();
public Product retrieveResult();
}

2.创建类ConcreteBuilder 实现 Builder接口。

public class ConcreteBuilder implements Builder {

private Product product = new Product();
/**
* 产品零件建造方法1
*/
@Override
public void buildPart1() {
//构建产品的第一个零件
product.setPart1("编号:AAAA");
}
/**
* 产品零件建造方法2
*/
@Override
public void buildPart2() {
//构建产品的第二个零件
product.setPart2("名称:建造者");
}
/**
* 产品返还方法
*/
@Override
public Product retrieveResult() {
return product;
}

}

3.创建类Director负责组装

public class Director {
/**
* 持有当前需要使用的建造器对象
*/
private Builder builder;
/**
* 构造方法,传入建造器对象
* @param builder 建造器对象
*/
public Director(Builder builder){
this.builder = builder;
}
public Director(){

}
/**
* 产品构造方法,负责调用各个零件建造方法
*/
public void construct(){
builder.buildPart1();
builder.buildPart2();
}
/**
* 产品构造方法,负责调用各个零件建造方法
* @return
*/
public Product construct(Builder pd){
pd.buildPart1();
pd.buildPart2();
return pd.retrieveResult();
}
}

4.创建类Product 产品类

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;
}
@Override
public String toString() {
return "产品简介: [part1=" + part1 + ", part2=" + part2 + "]";
}
}

5.创建Client测试类

public class Client {
public static void main(String[]args){
Director director = new Director();
Builder builder=new ConcreteBuilder();
Product product=director.construct(builder);
System.out.println(product.toString());
}
}

原文地址:https://www.cnblogs.com/cyz110/p/6384999.html