关于“建造者模式”的具体讲解请看笔者博客
《设计模式》第二部分 创建型设计模式 第4章 建造者模式(A:C++实现)
此文是“建造者模式”的Java实现。
(1) 产品角色:包含多个组成部件的复杂对象。
package com;
import java.util.ArrayList;
import java.util.List;
public class Product {
private List<String> Parts = new ArrayList<String>();
void add(String str)
{
Parts.add(str);
}
public void show()
{
//显示产品的特性
for(String it:Parts) {
System.out.println(it);
}
}
}
(2) 抽象建造者:包含创建产品各个子部件的抽象方法。
package com;
public abstract class Builder {
//创建产品对象
protected Product product=new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
//返回产品对象
public Product getResult()
{
return product;
}
}
(3) 具体建造者:实现了抽象建造者接口。
package com;
public class ConcreteBuilder_0 extends Builder{
@Override
public void buildPartA() {
product.add("Builder_0 buildPartA");
}
@Override
public void buildPartB() {
product.add("Builder_0 buildPartB");
}
@Override
public void buildPartC() {
product.add("Builder_0 buildPartC");
}
}
package com;
public class ConcreteBuilder_1 extends Builder{
@Override
public void buildPartA() {
product.add("Builder_1 buildPartA");
}
@Override
public void buildPartB() {
product.add("Builder_1 buildPartB");
}
@Override
public void buildPartC() {
product.add("Builder_1 buildPartC");
}
}
(4) 指挥者:调用建造者中的方法完成复杂对象的创建。
package com;
public class Director {
private Builder builder;
public Director(Builder builder)
{
this.builder=builder;
}
//产品构建与组装方法
public Product construct()
{
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}
(5) 客户类。
package com;
public class Main {
public static void main(String[] args) {
Builder builder_0=new ConcreteBuilder_0();
Director director=new Director(builder_0);
Product product=director.construct();
product.show();
Builder builder_1=new ConcreteBuilder_1();
director=new Director(builder_1);
product=director.construct();
product.show();
}
}
结果如下所示: