《设计模式》第二部分 创建型设计模式 第4章 建造者模式(B:Java实现)

108 阅读1分钟

关于“建造者模式”的具体讲解请看笔者博客

《设计模式》第二部分 创建型设计模式 第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();
	}
}

结果如下所示:
在这里插入图片描述