在某些特殊场景下,不允许一个类自由创建对象,只允许该类创建一个对象,这个类称为单例类。
因此,该类的构造器需要用private隐藏起来,这样就需要提供一个public的static方法 (调用该方法前还不存在对象,因此调用该方法只能是类) 作为该类的访问点,用于创建对象。
另外,该类还需要用一个成员变量缓存已经创建的对象,来确保对象是否已经创建和只创建了一个,该成员变量需要被上面的静态方法访问,所以用static修饰。
下面来创建一个单例类
class Singleton { // 使用一个类变量来缓存曾经创建的实例 private static Singleton instance; // 将构造器使用private修饰,隐藏该构造器 private Singleton() { } // 提供一个静态方法,用于返回Singleton实例 // 该方法可以加入自定义的控制,保证只产生一个Singleton对象 public static Singleton getInstance() { // 如果instance为null,表明还不曾创建Singleton对象 // 如果instance不为null,则表明已经创建了Singleton对象, // 将不会重新创建新的实例 if (instance == null) { // 创建一个Singleton对象,并将其缓存起来 instance = new Singleton(); } return instance; } } public class SingletonTest { public static void main(String[] args) { // 创建Singleton对象不能通过构造器, // 只能通过getInstance方法来得到实例 Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.println(s1 == s2); // 将输出true,因为两次产生的对象是同一个对象 } }