Builder

建造模式

有些情况,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象都不能为一个完整的产品使用。比如一封Email,必须有发件人地址、主题、内容等信息,否则是不能发送出去的。此时,这对象相当于一个有待建造的产品,而对象的性质相当于产品的零件。建造产品的过程就是建造零件的过程,建造者返回给客户端的是一个全部零件都建造好的产品对象。

Builder

在这个示意的UML图,最终产品 Product 只有两个零件:part1 和 part2 , 相应的建造方法是 builderPart1 和 builderPart2 。

  • 抽象建造者(Builder)角色:给出一个抽象接口,给规范产品的对象的各个组成成分的建造。具体建造者除了建造的方法之外,还要有一个返回结果的方法(retrieveResult)。一般来说,有多少零件,就有多少个建造方法。
  • 具体建造者(Concrete Builder):创建产品的实例
  • 导演者(Director):调用建造者角色以及其产品,导演者并没有产品类的具体知识,真正拥有产品类的具体知识是建造者角色。
  • 产品(Product):建造中的复杂对象。在系统中会多于一个产品类,而且这些产品类不一定同一个接口,可以完全无关联的。
public abstract class Builder {



    public abstract void builderPart1();



    public abstract void builderPart2();



    public abstract Product retrieveResult();

}
public class ConcreteBuilder extends Builder {



    private Product product = new Product();

    

    @Override

    public void builderPart1() {

        product.add("-- builderPart1");

    }



    @Override

    public void builderPart2() {

        product.add("-- builderPart2");

    }



    @Override

    public Product retrieveResult() {

        return product;

    }



}
public class Product {



    private LinkedList<String> parts = new LinkedList<String>();



    public void add(String part) {

        parts.add(part);

    }



    public void show() {

        for (String part : parts) {

            System.out.println(part);

        }

    }



}
public class Director {



    private Builder builder;

    

    public Director(){

        

    }

    

    public void construct(){

        builder = new ConcreteBuilder();

        builder.builderPart1();

        builder.builderPart2();

        builder.retrieveResult();

    }

    

}

 

你可能感兴趣的:(builder)