目录

单身人士课程(Singleton Classes)

Singleton的目的是控制对象创建,将对象数量限制为只有一个。 由于只有一个Singleton实例,Singleton的任何实例字段每个类只会出现一次,就像静态字段一样。 单身人士通常控制对资源的访问,例如数据库连接或套接字。

例如,如果您的数据库只有一个连接的许可证,或者您的JDBC驱动程序遇到多线程问题,则Singleton会确保只建立一个连接,或者一次只能有一个线程访问该连接。

实施单身人士

例子1 (Example 1)

最简单的实现包括一个私有构造函数和一个保存其结果的字段,以及一个名为getInstance()的静态访问器方法。

私有字段可以从静态初始化程序块中分配,或者更简单地使用初始化程序分配。 getInstance()方法(必须是公共的)然后只返回此实例 -

// File Name: Singleton.java
public class Singleton {
   private static Singleton singleton = new Singleton( );
   /* A private Constructor prevents any other
    * class from instantiating.
    */
   private Singleton() { }
   /* Static 'instance' method */
   public static Singleton getInstance( ) {
      return singleton;
   }
   /* Other methods protected by singleton-ness */
   protected static void demoMethod( ) {
      System.out.println("demoMethod for singleton");
   }
}

这是我们将创建单个对象的主程序文件 -

// File Name: SingletonDemo.java
public class SingletonDemo {
   public static void main(String[] args) {
      Singleton tmp = Singleton.getInstance( );
      tmp.demoMethod( );
   }
}

这将产生以下结果 -

输出 (Output)

demoMethod for singleton

例子2 (Example 2)

以下实施显示了经典的Singleton设计模式 -

public class ClassicSingleton {
   private static ClassicSingleton instance = null;
   private ClassicSingleton() {
      // Exists only to defeat instantiation.
   }
   public static ClassicSingleton getInstance() {
      if(instance == null) {
         instance = new ClassicSingleton();
      }
      return instance;
   }
}

ClassicSingleton类维护对单个单例实例的静态引用,并从静态getInstance()方法返回该引用。

在这里,ClassicSingleton类采用一种称为延迟实例化的技术来创建单例; 因此,在第一次调用getInstance()方法之前,不会创建单例实例。 此技术可确保仅在需要时创建单例实例。

↑回到顶部↑
WIKI教程 @2018