在本教程中,我们将借助示例学习单例设计模式以及如何在 Java 中应用它。
单例是一种设计模式,而不是 Java 特有的功能。 它确保只创建一个类的实例。
设计模式就像我们的代码库一样,其中包含世界各地程序员共享的各种编码技术。
Java 单例
这是我们如何在 Java 中使用单例。
- 创建
private
构造器,该构造器限制在类之外创建对象 - 创建一个引用单个对象的
private
属性。 - 创建一个
public static
方法,该方法允许我们创建和访问我们创建的对象。 在方法内部,我们将创建一个条件来限制我们创建多个对象。
这是一个例子。
class SingletonExample {
// private field that refers to the object
private static SingletonExample singleObject;
private SingletonExample() {
// constructor of the SingletonExample class
}
public static SingletonExample getInstance() {
// write code that allows us to create only one object
// access the object as per our need
}
}
在上面的示例中,
private static SingletonExample singleObject
- 对类对象的引用。private SingletonExample()
- 私有构造器,用于限制在类外部创建对象。public static SingletonExample getInstance()
- 此方法返回对该类唯一对象的引用。 由于方法是static
,因此可以使用类名进行访问。
使用单例类
使用数据库时可以使用单例。 它们可用于创建连接池以访问数据库,同时为所有客户端重用相同的连接。 例如,
class Database {
private static Database dbObject;
private Database() {
}
public static Database getInstance() {
// create object if it's not already created
if(dbObject == null) {
dbObject = new Database();
}
// returns the singleton object
return dbObject;
}
public void getConnection() {
System.out.println("You are now connected to the database.");
}
}
class Main {
public static void main(String[] args) {
Database db1;
// refers to the only object of Database
db1= Database.getInstance();
db1.getConnection();
}
}
当我们运行程序时,输出将是:
You are now connected to the database.
在上面的示例中,
- 我们已经创建了一个单例类
Database
。 dbObject
是一个类类型字段。 这将引用类Database
的对象。- 私有构造器
Database()
防止在类外部创建对象。 - 静态类类型方法
getInstance()
将类的实例返回到外部世界。 - 在
Main
类中,我们具有类类型变量db1
。 我们正在使用db1
调用getInstance()
以获取Database
的唯一对象。 - 只能使用
Database
的对象访问方法getConnection()
。 - 由于
Database
只能有一个对象,因此所有客户端都可以通过单个连接访问数据库。
重要的是要注意,只有少数情况(如记录)使单例有意义。 甚至数据库连接通常也不应是单例。
如果您不确定是否使用单例,建议您完全避免使用单例。 了解更多: 单例有什么不好?](https://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons “Why not to use singletons?”)