构建器模式如何在其实现中使用单例?

时间:2013-09-30 21:43:03

标签: design-patterns singleton builder

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

来自Wikipedia: Builder Pattern“抽象工厂,构建器和Prototype可以在其实现中使用Singleton”

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

1 个答案:

答案 0 :(得分:4)

我不认为建设者应该是单身人士。

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

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 ...);
    }
}

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

即使进行了适当的同步,我认为其他线程/以前构建的生产价值泄漏到您产品中的漏洞和惊喜的可能性也不值得。