ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Java 单例 > 原文: [https://www.programiz.com/java-programming/singleton](https://www.programiz.com/java-programming/singleton) #### 在本教程中,我们将借助示例学习单例设计模式以及如何在 Java 中应用它。 单例是一种设计模式,而不是 Java 特有的功能。 它确保只创建一个类的实例。 设计模式就像我们的代码库一样,其中包含世界各地程序员共享的各种编码技术。 * * * ## Java 单例 这是我们如何在 Java 中使用单例。 * 创建`private`构造器,该构造器限制在类之外创建对象 * 创建一个引用单个对象的`private`属性。 * 创建一个`public static`方法,该方法允许我们创建和访问我们创建的对象。 在方法内部,我们将创建一个条件来限制我们创建多个对象。 这是一个例子。 ```java 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`,因此可以使用类名进行访问。 * * * ## 使用单例类 使用数据库时可以使用单例。 它们可用于创建连接池以访问数据库,同时为所有客户端重用相同的连接。 例如, ```java 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(); } } ``` 当我们运行程序时,输出将是: ```java 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?")