意图:

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

结构图:

Singleton

代码示例:

public class Singleton {  
    private static Singleton instance = new Singleton();  
      
    private Singleton() {  
          
    }  
      
    public static Singleton getInstance() {  
        return instance;  
    }  
      
    public void test() {  
        System.out.println("Singleton test");  
    }  
      
    public static void main(String[] args) {  
        Singleton s = Singleton.getInstance();  
        s.test();  
    }  
}

效果:

因为Singleton类封装它的唯一实例,所以它可以严格的控制。

注意:

Singleton不是说只能唯一,也可以控制其实例的数量,对多个实例的创建和控制。

Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。

实现:

保证一个唯一的实例是该模式的重点,不同语言对此有不同的方法。面对语言特性,还需要注意并发同步等问题。

相关模式:

Abstract Factory、Builder、Prototype都可以用Singleton实现。