2014-02-06 45 views
0

我使用創建我的對象,如下面的,這裏既有MyObjectYourObject類實現MyInterface使用字段/在工廠類變量跨越通過工廠創建對象使用

public class MyFactory { 
    public static MyInterface myObject(int value, int commonValue) { 
     return new MyObject(value, commonValue); 
    } 

    public static MyInterface yourObject(String str, int commonValue) { 
     return new YourObject(str, commonValue); 
    } 
} 

我想在工廠級別設置commonValue,而不是將它們作爲單個方法中的參數傳遞,因爲使用工廠傳遞相同的值以創建對象集合。另外,一旦我使用工廠創建一組對象,我想將commonValue重置爲其默認值,以便之後默認不使用之前設置的值。 什麼是正確的方法來做到這一點?

回答

3

由於您commonValue可以改變,一個更清潔的方式(恕我直言)將是:

public class MyFactory { 
    private final int commonValue; 
    public MyFactory (int commonValue) { this.commonValue = commonValue; } 

    public MyInterface myObject(int value) { 
     return new MyObject(value, commonValue); 
    } 

    public MyInterface yourObject(String str) { 
     return new YourObject(str, commonValue); 
    } 
} 

而當你需要重置,只需創建一個新的工廠。

的好處是:

  • 很明顯的價值是什麼(如果你使用一個setter一個可變值,一些代碼可能會影響到非相關的代碼)
  • 它是線程安全的
+0

該實現將如何幫助「將commonValue重置爲默認值」?也許不應該使用'final'修飾符,並且可能會爲'commonValue'屬性設置默認值,而使用'defaultValue'屬性作爲'final'。請糾正我,如果我錯了。 –

+2

@FlavioCysne重置值,你創建一個新的工廠:'MyFactory reset = new MyFactory(defaultValue);'。這個建議可能不適用於操作系統的用例,但如果是這樣的話,我認爲這比使用'reset'方法的可變工廠要好得多,因爲它會產生容易出錯的副作用...... – assylias

+0

我認爲這個解決方案對我來說很有用因爲這確實提供了我需要的重置,謝謝+1 – Learner

0

我使用Spring框架來完成這種事情。讓我先建立我的工廠,然後從他們那裏建造。這是一個選項嗎?

+0

感謝您的回答,但我正在尋找一個簡單的解決方案,而不使用框架。 – Learner