类图
工程目录
代码
Product.java
package com.company.pattern.demo09;
import java.util.ArrayList;
import java.util.List;
/**
* 产品类
* @author blazar
*/
public class Product {
List<String> parts = new ArrayList<>();
/**
* 添加产品部件
* @param part
*/
public void add(String part){
parts.add(part);
}
/**
* 列举出所有的产品部件
*/
public void show(){
System.out.println("产品部件:");
for(String x : parts){
System.out.println(x);
}
}
}
AbstractBuilder.java
package com.company.pattern.demo09;
/**
* 抽象的建造者类
* @author blazar
*/
public abstract class AbstractBuilder {
/**
* 建造A部分
*/
public abstract void buildPartA();
/**
* 建造B部分
*/
public abstract void buildPartB();
/**
* 获得建造完成的产品类
* @return
*/
public abstract Product getResult();
}
ConcreteBuilder1.java
package com.company.pattern.demo09;
/**
* @author blazar
*/
public class ConcreteBuilder1 extends AbstractBuilder{
private Product product = new Product();
@Override
public void buildPartA() {
product.add("部件A1");
}
@Override
public void buildPartB() {
product.add("部件B1");
}
@Override
public Product getResult() {
return product;
}
}
ConcreteBuilder2.java
package com.company.pattern.demo09;
/**
* @author blazar
*/
public class ConcreteBuilder2 extends AbstractBuilder{
private Product product = new Product();
@Override
public void buildPartA() {
product.add("部件A2");
}
@Override
public void buildPartB() {
product.add("部件B2");
}
@Override
public Product getResult() {
return product;
}
}
Director.java
package com.company.pattern.demo09;
/**
* 指挥者类
* 用来指挥建造过程
* @author blazar
*/
public class Director {
public void construct(AbstractBuilder abstractBuilder){
abstractBuilder.buildPartA();
abstractBuilder.buildPartB();
}
}
测试类 Main.java
package com.company.pattern.demo09;
/**
* 测试类
* @author blazar
*/
public class Main {
public static void main(String[] args) {
Director director = new Director();
AbstractBuilder abstractBuilder1 = new ConcreteBuilder1();
AbstractBuilder abstractBuilder2 = new ConcreteBuilder2();
/**
* 指挥者用ConcreteBuilder1的方法来建造产品
*/
director.construct(abstractBuilder1);
Product product = abstractBuilder1.getResult();
product.show();
}
}
总结
建造者模式使得创建一个复杂对象的算法独立于组成这个对象各个部分的实现和这些不同部分的装配方式;
参考《大话设计模式》