跳到主要内容

Java 单例类

提示
  1. 单例类定义:Java 中的单例类确保只能创建该类的一个对象,通过定义 private 构造函数、private 类型的对象引用和 public static 方法实现。
  2. 实现方法:在单例类中,创建私有静态对象引用和私有构造函数防止外部实例化,同时通过公共静态方法提供对唯一实例的访问。
  3. 应用场景:单例模式常用于数据库连接,创建一个连接池以供所有客户端共享同一连接,从而节约资源和提高效率。

在 Java 中,单例是一种设计模式,确保一个类只能有一个对象。

要创建一个单例类,一个类必须实现以下属性:

  • 创建类的 private 构造函数,以限制在类外部创建对象。
  • 创建一个指向单个对象的类类型的 private 属性。
  • 创建一个 public static 方法,允许我们创建和访问我们创建的对象。在方法中,我们将创建一个条件,防止我们创建多于一个对象。

示例:Java 单例类语法

class SingletonExample {

// 指向对象的私有字段
private static SingletonExample singleObject;

private SingletonExample() {
// SingletonExample 类的构造函数
}

public static SingletonExample getInstance() {
// 编写代码,只允许创建一个对象
// 根据需要访问对象
}
}

在上面的示例中,

  • private static SingletonExample singleObject - 类对象的引用。
  • private SingletonExample() - 私有构造函数,限制在类外部创建对象。
  • public static SingletonExample getInstance() - 此方法返回类的唯一对象的引用。由于方法是 static 的,可以使用类名访问。

Java 中的单例使用

单例可以在处理数据库时使用。它们可用于创建连接池以访问数据库,同时为所有客户端重用同一连接。例如,

class Database {
private static Database dbObject;

private Database() {
}

public static Database getInstance() {

// 如果对象尚未创建,则创建对象
if(dbObject == null) {
dbObject = new Database();
}

// 返回单例对象
return dbObject;
}

public void getConnection() {
System.out.println("您现在已连接到数据库。");
}
}

class Main {
public static void main(String[] args) {
Database db1;

// 引用 Database 的唯一对象
db1= Database.getInstance();

db1.getConnection();
}
}

当我们运行程序时,输出将是:

您现在已连接到数据库。

在我们上面的示例中,

  • 我们创建了一个单例类 Database
  • dbObject 是一个类类型字段。这将引用类 Database 的对象。
  • 私有构造函数 Database() 防止在类外部创建对象。
  • 静态类类型方法 getInstance() 向外界返回类的实例。
  • Main 类中,我们有类类型变量 db1。我们使用 db1 调用 getInstance() 来获取 Database 的唯一对象。
  • 方法 getConnection() 只能使用 Database 的对象访问。
  • 由于 Database 只能有一个对象,所以所有客户端都可以通过单个连接访问数据库。

单例是一种设计模式,而不是 Java 特有的功能。设计模式就像我们的代码库,包含了全球程序员共享的各种编码技巧。

需要注意的是,只有在少数情况下(如日志记录),单例才有意义。如果您不确定是否使用它们,我们建议您完全避免使用单例。了解更多:单例有什么不好?