如何在Java中创建一个单子类(附实例)

124 阅读2分钟

单子类是一个在程序的生命周期内只创建一个对象实例的类。

在Java中,单子类是一个实现了单子设计模式的普通类,只允许创建一个类的实例。

下面是Java中单例类的设计模式:

  • 该类必须提供一个全局访问点来获取该类的实例。这通常是通过一个返回该类实例的public static 方法来实现的。
  • 该类必须只有一个private 构造函数。一个private 构造函数只能被该类访问,所以这确保了该类能控制实例的创建。
  • 该类必须有一个private static 属性来存储该类的实例。

下面的代码显示了一个名为Single 的单子类的例子:

class Single {
// Create an instance of the Single class
 // save it inside a private static attribute
 private static Single singleton = new Single();
// A private Constructor
 // ensures only one instance created
 private Single() {}
// Access to the class instance here
 public static Single getInstance() {
return singleton;
}
}

上面的代码是一个用早期实例化策略实现的单子类基本结构。

当你用上面定义的单子类运行程序时,一旦该类被加载,就会立即创建一个新的实例。

如果你想进一步优化单子类,你可以采用懒惰实例化策略。

getInstance() 方法第一次被调用时,该实例将被创建:

class Single {
 private static Single singleton = null;

private Single() {}
// Lazy instantiation
 public static Single getInstance() {
 if (singleton == null) {
 singleton = new Single();
 }
return singleton;
}
}

singleton 实例将被初始化为null 。实例将在第一次调用getInstance() 方法时被创建。

要访问该类的实例,你要调用该类的getInstance() 方法。

在下面的例子中,ab 将指代同一个对象:

Single a = Single.getInstance();
Single b = Single.getInstance();

一个创建类的实例的方法也被称为工厂方法。上面的getInstance() 方法就是工厂方法的一个例子。

你可以向单子类添加属性和方法,就像其他正常的Java类一样:

class Single {
private static Single singleton = null;
private Single() {
}
public static Single getInstance() {
if (singleton == null) {
singleton = new Single();
}
return singleton;
}
// Add attributes and methods
 String name = "Nathan";
void greetings(){
System.out.println("Hello World!");
}
}

你可以按以下方式访问单子类的属性和方法:

Single objInstance = Single.getInstance();
objInstance.addressee = "John";
objInstance.greetings(); // Hello, John!

这就是你如何在Java中创建一个单子类。

当你需要控制对类实例的访问时,通常会定义一个单子类,将对象的创建数量限制在一个。