2013-09-30 48 views

回答

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

但通過重複使用相同的單個實例,你必須確保你正確,而不是將所有的值無意中重複使用以前生成的產品的舊值。

即使有正確的同步,我想從其他線程錯誤和意外的可能性/前建成生產值泄漏到你的產品就不能使它值得。

+1

+1「我不認爲建設者應該是單身。」 – kevinpeterson

+0

我同意,我不認爲它應該是單身人士。此外,我不能想出一種方法來實施它,並且仍然是安全的。 –