2015-07-20 121 views
2

我有一個對象說A從磁盤加載一些數據,它需要一點點時間加載。許多其他的對象需要它的方法和數據,所以我不希望任何時候我需要它創建一個新的,也沒有通過類的構造函數傳遞它。有沒有辦法在運行項目開始時只創建一次類A的實例,並且所有其他對象都可以訪問對象A如何從其他對象訪問特定對象而不傳遞指向該對象的指針?

如果我的問題重複,我很抱歉,但我不知道什麼關鍵字與這個問題有關,以找到相關的問題。

+1

你在尋找'Singleton Object'嗎? –

+0

你正在尋找[Singleton模式](http://stackoverflow.com/questions/70689/what-is-an-efficient-way-to-implement-a-singleton-pattern-in-java) – Glorfindel

+0

是我認爲這意味着一個單身人士,但我不確定。我不想通過我的項目實例化那麼多對象 – user3070752

回答

2

在你正在處理的Singleton Design Pattern這種情況下,你應該申報的youre類是這樣的:

public class SingleObject { 

    //create an object of SingleObject 
    private static SingleObject instance = new SingleObject(); 

    //make the constructor private so that this class cannot be 
    //instantiated 
    private SingleObject(){} 

    //Get the only object available 
    public static SingleObject getInstance(){ 
     return instance; 
    } 

    public void showMessage(){ 
     System.out.println("Hello World!"); 
    } 
} 

然後您可以按預期使用它。


其實這裏的方法是使用static成員如下:

public class Vehicle { 

    private static String vehicleType; 

    public static String getVehicleType(){ 
     return vehicleType; 
    } 

} 

static修改允許我們使用類名本身來訪問變量vehicleType和方法getVehicleType()如下:

Vehicle.vehicleType 
Vehicle.getVehicleType() 

看看一個t Java static class Example瞭解更多信息。

1

當然。設計模式被稱爲單例。它看起來是這樣的:

public class Singleton { 
    private static Singleton instance; 
    private Singleton() {} 

    /* 
    * Returns the single object instance to every 
    * caller. This is how you can access the singleton 
    * object in your whole application 
    */ 
    public static Singleton getInstance() { 
     if (Singleton.instance == null) { 
      Singleton.instance = new Singleton(); 
     } 
     return Singleton.instance; 
    } 
} 

所有對象都可以使用單通過調用Singleton.getInstance()

+3

請注意,單例模式的實現不是線程安全的 - 有各種更好的。詳細信息請閱讀Effective Java。 –

相關問題