2015-06-29 93 views
0

我有一個由3個類組成的簡單程序。 GUI,驅動程序和主要。創建類的新對象或使用靜態方法?

主類:

public static void main(String[] args){ 
GUI theGUI = new GUI(); 
} 

GUI類:

public void makeGUI(){ 
final GUI guiInstance = new GUI(); 
//some other code here 
} 

而不是創建兩個對象,我可以只是使makeGUI()方法的靜態,所以可只避免產生一個不必要的對象的?我知道這個規模的程序,性能並不重要,但是嘗試避免不必要的對象是不錯的編程習慣嗎?

+2

是的。這就是所謂的工廠方法,它是合理和常見的。 (番石榴使用它的大部分對象)。 – yshavit

+0

製造不必要的物體絕對不好。從你的代碼中,很難看到這些不必要的對象是什麼 – ControlAltDel

回答

1

有兩種主要模式可以幫助你。第一個是singleton,可能是你正在做的最直接的事情。這個想法是,你只創建一個對象,然後用靜態方法來獲取對象。在你的例子中,GUI類可能看起來像這樣:

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

    //Make constructor private so that no one can create an instance 
    private GUI(){} 

    public GUI getInstance(){ 
     return instance(); 
    } 

    ... other code 
} 

還有其他的方法來創建單例,但這可能是最簡單的。

其他模式被稱爲factory模式。這與singleton類似,但可以讓您更多地控制實例的數量以及實例的創建方式。這可能是爲了你所做的事而矯枉過正。

當你真的想要保持實例不變並具有更大的靈活性時,你想開始研究Dependency injection以及像spring這樣的框架。

0

有趣的是,這個小問題如何根據上下文確實有許多大的解決方案。你工作的應用程序越大,這就是更多的問題。特別是當你進入單元測試和交換實現時。本質上你的代碼將不會有很多new調用。

這可能與下列中增加了複雜性順序來解決......

1)工廠方法。 example

2)建築商。 example

3)Singleton。 example

4)依賴注入或控制反轉。 example

5)服務定位器。 example

6)Web服務。爲什麼在可以使用服務時創建新對象。 example