建造者模式

来源:互联网 发布:mac ifconfig 编辑:程序博客网 时间:2024/05/21 17:10

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

依然是来个例子

首先是我们要构建的产品,包含一个添加方法与显示方法

public class Product{    private List<String> parts = new ArrayList<String>();    public void add(String part)    {        this.parts.add(part);    }    public void show()    {        System.out.println("\n产品创建---");        for (String string : this.parts)        {            System.out.println(string);        }    }}

然后是个建造者类,这是个虚类,所有方法都是虚的,子类必须实现所有方法才行,这就避免了在实际创建时缺少某些步骤的情况

public abstract class Builder{    abstract public void bilderPartA();    abstract public void bilderPartB();    abstract public Product getResult();}

第一个具体类,实现父类的方法,也就是给产品加些字符串,也是在实际代码中给产品增加的新内容

public class ConcreteBuilder1 extends Builder{    private Product product = new Product();    @Override    public void bilderPartA()    {        this.product.add("部件A");    }    @Override    public void bilderPartB()    {        this.product.add("部件B");    }    @Override    public Product getResult()    {        return this.product;    }}

第二个子类,同上

public class ConcreteBuilder2 extends Builder{    private Product product = new Product();    @Override    public void bilderPartA()    {        this.product.add("部件K");    }    @Override    public void bilderPartB()    {        this.product.add("部件L");    }    @Override    public Product getResult()    {        return this.product;    }}

指挥官,这牛逼角色,控制着构建过程,

public class Director{    public void construct(Builder builder)    {        builder.bilderPartA();        builder.bilderPartB();    }}

客户端就很简单了,感觉与前面的几种模式有很大的相同点

public class BuilderMain{    public static void main(String[] args)    {        Director director = new Director();        Builder builder = new ConcreteBuilder1();        director.construct(builder);        Product p1 = builder.getResult();        p1.show();        builder = new ConcreteBuilder2();        director.construct(builder);        Product p2 = builder.getResult();        p2.show();    }}

总结:这个模式主要用在那些构建细节比较复杂,构建过程又比较单一,可以将这个过程总结出来,放到父类中强制子类实现;指挥官的角色会保证构建过程的完整。

0 0