创建类静态getter而不是对象链接

时间:2014-09-21 09:49:30

标签: java

当你有很多课程时,通常需要从另一个课程中访问一个课程的字段/方法。我对Java不是很有经验,我最近发现这个方法看起来非常方便(比将变量从一个类传递到另一个类更好):

class MyClass {
    private static MyClass _instance = null;

    public MyClass(){
        ...
    }

    public static getInstance(){
        if (_instance == null) {
            _instance = new MyClass();
        }
        return _instance;
    }
}

现在在任何其他课程中我都可以做到

MyClass.getInstance().callSomething()

但是我没有看到在Internet上找到的Java示例和教程中访问其他类的方法。这让我思考,这种方法可能存在一些潜在的问题吗?特别是当你有很多类,因此每个都有很多这样的静态调用?

2 个答案:

答案 0 :(得分:2)

  

MyClass.getInstance()。callSomething()

     

但是我没有看到用Java访问其他类的方法   我在互联网上找到的示例和教程。

您指定的方法是最常用的名为Singleton模式的设计模式之一。

在Java中,Singleton模式将确保在Java虚拟机中只创建一个类的实例。它用于提供对象的全局访问点。在实际使用方面,Singleton模式用于日志记录,高速缓存,线程池,配置设置,设备驱动程序对象。设计模式通常与工厂设计模式结合使用。

但是,您的代码似乎不符合Singleton Design模式的合同。它主要要求您的类只有私有构造函数(以避免其他类实例化它)。

public MyClass(){ // Constructor needs to be private
        ...
    }

getInstance()方法似乎也没有效果。 试试这个:

public static MyClass getInstance(){

建议使用 Enum 在Java 5或更高版本中实现Singleton。 Enum是线程安全的,通过Enum实现Singleton可确保您的单例即使在多线程环境中也只有一个实例

请点击此链接详细了解Singleton pattern using Enum

这是一个很好的链接,可以帮助您understand Singleton pattern in detail.

答案 1 :(得分:0)

这种设计模式叫做Singleton,看看下面的问题。

What is so bad about singletons?