在很多业务流程中,某一项需求是需要比如 A与B的类共同组成的,或者是生成很多复杂的算法的时候。比如
一个产品类product,需要多个部件组成。
package builder; import java.util.ArrayList; import java.util.List; public class Product { List<String> parts = new ArrayList<String>(); public void Add(String part){//添加产品部件 parts.add(part); } public void Show(){ System.out.println("\n 产品 创建----"); for (String str : parts) {//列举所有的产品部件 System.out.println(str); } } }
Builder类--抽象建造者类,确定产品由两个部件PartA 和PartB组成,并声明一个获得产品结果的方法GetResult
package builder; public abstract class Builder { public abstract void BuildPartA(); public abstract void BuildPartB(); public abstract Product getResult(); }
再创建2个具体构建类,用于生产产品的部件
package builder; public class ConcreteBuilder1 extends Builder { private Product product = new Product(); @Override public void BuildPartA() { product.Add("部件A"); } @Override public void BuildPartB() { product.Add("部件B"); } @Override public Product getResult() { return product; } }
package builder; public class ConcreteBuilder2 extends Builder { private Product product = new Product(); @Override public void BuildPartA() { // TODO Auto-generated method stub product.Add("部件X"); } @Override public void BuildPartB() { // TODO Auto-generated method stub product.Add("部件Y"); } @Override public Product getResult() { // TODO Auto-generated method stub return product; } }
然后是指挥类,用于创建部件
public class Director { public void Construct(Builder builder){ builder.BuildPartA(); builder.BuildPartB(); }
然后是客户端代码,客户不用知道具体的产品生产过程,用来创建产品
public static void main(String[] args) { Director director = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcreteBuilder2(); director.Construct(b1); Product p1 = b1.getResult(); p1.Show(); director.Construct(b2); Product p2 = b2.getResult(); p2.Show(); }