0

我遇到了几个对作为单例实现的构建器模式的引用:

来自Wikipedia:Builder Pattern“Abstract Factory、Builder 和 Prototype 可以在其实现中使用 Singleton”

builder patten 如何实现单例?buildParts()当多个线程调用单例构建器时,您如何维护创建的状态?

4

1 回答 1

4

我认为 Builders 不应该是单身人士。

如果你真的很想我想你可以做这样的事情:

public final class Builder{
    private static final Builder instance = new Builder();

    private Part part1= null;

    private Part part2= null;
    ...

    public static Builder getInstance() { 
         return instance;
    }

    private Builder() { /*singleton  */ }

    public Builder buildPart1(Part p){
        part1 = p;
        return this;
    }
    ...build other parts similar;

    Product getResult(){
        return new ConcreteProduct(part1, part2 ...);
    }
}

但是通过重用相同的单例实例,您必须确保正确设置所有值,并且不会意外重用以前构建的产品中的旧值。

即使有适当的同步,我认为其他线程/先前构建的生产值泄漏到您的产品中的错误和惊喜的可能性也不值得。

于 2013-09-30T23:31:15.867 回答