当我们自由的创建某个类的实例没有意义,还可能会降低系统性能下降的时候,如整个系统只有一个窗口管理器,JavaEE应用中只需要一个数据库访问点。
如果一个类只能创建一个实例,这种类就是单例类,这种模式就是单例模式。为了避免程序自由创建该类的实例,应该用private修饰该类的构造器,将构造器隐藏起来。另外,该类还要缓存已经创建的对象,否则无法知道是否创建过对象,也就不能保证只创建了一个实例。所以应该要有个静态属性来保存曾经创建的对象,并且该属性需要被静态方法访问。
下面是一个简单的范例
package model.singleton;
public class SingletonModel {
//private修饰隐藏构造器
private SingletonModel(){
}
// 使用变量来缓存曾经创建的实例
private static SingletonModel singleton = null;
// 提供静态方法,还回实例
public static SingletonModel getSingleton(){
if(null == singleton){
singleton =new SingletonModel();
}
return singleton;
}
}
测试类
package model.singleton;
public class TestSingleton {
/**
* @param args
*/
public static void main(String[] args) {
SingletonModel singleton = SingletonModel.getSingleton();
SingletonModel singleton2 = SingletonModel.getSingleton();
System.out.println(singleton==singleton2);
}
}
运行结果为true 说明singleton和singleton2指向同一个单例。