📜  Java中的私有构造函数和Singleton类

📅  最后修改于: 2020-04-02 14:05:47             🧑  作者: Mango

让我们首先分析以下问题:
我们可以有私有构造函数吗?
您很容易猜到,就像任何方法一样,我们可以为构造函数提供访问说明符。如果将其设为私有,则只能在类内部访问它。

我们需要这样的“私有构造函数”吗?
在多种情况下,我们可以使用私有构造函数。主要是

  1. 内部构造函数链接
  2. Singleton类设计模式

什么是Singleton类?
顾名思义,如果某个类将该类的对象数限制为一个,则该类称为Singleton类。
这些类的对象不能超过一个。
Singleton类在诸如网络和数据库连接之类的概念中被广泛采用。

Singleton类的设计模式:
单例类的构造函数将是私有的,因此必须有另一种方法来获取该类的实例。使用类成员实例和工厂方法返回该类成员可以解决此问题。
以下是Java中的示例说明了这一点:

// Java使用私有构造函数创建Singleton类的实例
import java.io.*;
class MySingleton
{
    static MySingleton instance = null;
    public int x = 10;
    // 私有构造函数不能被外部类访问
    private MySingleton() {  }
    // 工厂函数提供用户实例
    static public MySingleton getInstance()
    {
        if (instance == null)
             instance = new MySingleton();
        return instance;
    }
}
// 测试代码
class Main
{
   public static void main(String args[])
   {
       MySingleton a = MySingleton.getInstance();
       MySingleton b = MySingleton.getInstance();
       a.x = a.x + 10;
       System.out.println("打印a.x = " + a.x);
       System.out.println("打印b.x = " + b.x);
   }
}

输出:

打印a.x = 20
打印b.x = 20

我们更改了ax的值,bx的值也得到了更新,因为’a’和’b’都引用相同的对象,即它们是单例类的对象。