建造者组成与结构
建造者(Builder)模式(生成器模式)由产品、抽象建造者、具体建造者、指挥者等 4 个要素构成。
建造者(Builder)模式的主要角色如下。
- 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个滅部件。
- 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
- 具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
- 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。
结构图
Product类代码:产品角色包涵复杂产品组成部件。
public class Product {
private String PartA;
private String PartB;
private String PartC;
public void setPartA(String partA) {
PartA = partA;
}
public void setPartB(String partB) {
PartB = partB;
}
public void setPartC(String partC) {
PartC = partC;
}
public void Show()
{
//显示产品的特性
System.out.println("部件A:"+PartA+" 部件B:"+PartB+" 部件C:"+PartC);
}
}
抽象建造者Builder类:提供如何创建部件的抽象方法。
public abstract class Builder {
public Product product = new Product();
public abstract void buildA();
public abstract void buildB();
public abstract void buildC();
//返回产品对象
public Product getResult() {
return product;
}
}
具体的产品A创建者类:通过继承Builder类提供创建部件的抽象方法以及属性Product为产品赋予具体产品的部件的创建。
public class ConcreteBuilderA extends Builder {
@Override
public void buildA() {
product.setPartA("建造 PartA");
}
@Override
public void buildB() {
product.setPartA("建造 PartB");
}
@Override
public void buildC() {
product.setPartA("建造 PartC");
}
}
指挥者Director类:调用建造者中的方法完成复杂对象的创建。甩给外面一个类,使使用者不需要注重具体产品的实现过程。
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Product construct() {
builder.buildA();
builder.buildB();
builder.buildC();
return builder.getResult();
}
}
组合调用Client类:
public static void main(String[] args) {
Builder builder=new ConcreteBuilderA();
Director director=new Director(builder);
Product product=director.construct();
product.Show();
}
运行程序输出结果: