Java类的单个实例

时间:2010-01-14 06:17:32

标签: java singleton

我想创建一个类的单个实例。如何在Java中创建一个类的单个实例?

4 个答案:

答案 0 :(得分:18)

要创建类的真正单个实例(暗示JVM级别的单例),您应该使您的类成为Java enum

public enum MyClass {
  INSTANCE;

  // Methods go here
}

单例模式使用静态,因此在单元测试时通常会导致严重破坏。

Joshua Bloch的Effective Java的第3项对此进行了解释。

答案 1 :(得分:10)

非常基本的单身人士。

public class Singleton {
  private static Singleton instance;

  static {
    instance = new Singleton();
  }

  private Singleton() { 
    // hidden constructor
  }    

  public static Singleton getInstance() {
    return instance;
  }
}

你也可以使用懒惰的持有者模式

public class Singleton {

  private Singleton() { 
    // hidden constructor
  }

  private static class Holder {
    static final Singleton INSTANCE = new Singleton();
  }

  public static Singleton getInstance() {
    return Holder.INSTANCE;
  }
}

在访问getInstance()之前,此版本不会创建单例实例,但由于JVM /类加载器处理内部类创建的方式,因此保证只能调用一次构造函数。

答案 2 :(得分:5)

使用单例模式。

Singleton pattern

更新:

  

单身人士模式是什么?   单例模式是一种设计模式,用于将类的实例化限制为一个对象

答案 3 :(得分:1)

In Java, how can we have one instance of the BrokerPacket class in two threads? 

这样所有线程都会更新将不同的BrokerLocation存储在一个位置数组中。 例如:

class BrokerLocation implements Serializable {
    public String  broker_host;
    public Integer broker_port;

    /* constructor */
    public BrokerLocation(String host, Integer port) {
        this.broker_host = host;
        this.broker_port = port;
    }
}


public class BrokerPacket implements Serializable {
    public static BrokerLocation locations[];   

}