源文档 <​http://baike.baidu.com/view/1859857.htm>

​对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。 ​


作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

单例模式的要点有三个:一是某各类只能有一个实例;

二是它必须自行创建这个事例;

三是它必须自行向整个系统提供这个实例。

java中,可以使用以下这种方式使用单例模式创建类的实例:

//虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。



package com.fs.test;


public class A {

private static A a; //null

private A() {                 //将构造器设为私有,将不能在类外调用new函数;保证该类只能有一个实例

}

public static A getA() {

if(A.a==null) {

A.a = new A();         //自行创建这个事例;

}

return A.a;                //向整个系统提供这个实例

}


public void m(){

System.out.println("aaa");

}

}



package com.fs.test;


public class Test {

public static void main(String[] args) {

A a = A.getA();

a.m();//aaa

A a2 = A.getA();

a2.m();//aaa

System.out.println(a==a2);//true;没有新对象生成。

}

}



new函数在创建一个对象的时候,将调用其构造器;设为私有的构造器将保证不能在类外创建该类对象。