1.作用
保证只有一个实例,并且提供一个访问该实例的全局访问点。
2.常见场合
window的任务管理器和回收站、项目的配置文件、打印机
3.如何保证唯一性
1.不允许其他程序用new创建该类对象。
2在该类创建一个本类的实例。
3.对外提供一个方法让其他程序获取该对象。
4.设计步骤
1.私有化该类构造函数
2.通过new在本类创建一个本类对象
3.定义一个公有的方法,将创建的对象返回
5.常规形式
1.懒汉式
懒汉式单例呢,可以这样理解,单例模式呢,其在整个应用程序的生命周期中只存在一个实例,懒汉式呢,就是这个单例类的这个唯一实例是在第一次使用 GetInstance()时实例化的,如果您不调用 GetInstance()的话,这个实例是不会存在的,即为 null形象点说呢,就是你不去动它的话,它自己是不会实例化的,所以可以称之为懒汉。
public class SingletonClass{
private static SingletonClass instance=null;
public static synchronized SingletonClass getInstance()
{
if(instance==null)
{
instance=new SingletonClass();
}
return instance;
}
private SingletonClass(){
}
}
2.饿汉式
饿汉式的话,刚好相反,其由于肚子饿了,所以到处找东西吃,人也变得主动了很多,所以根本就不需要别人来催他实例化单例类的为一实例,其自己就会主动实例化单例类的这个唯一类。
public static class Singleton{
//在自己内部定义自己的一个实例,只供内部调用
private static final Singleton instance = new Singleton();
private Singleton(){
//do something
}
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance(){
return instance;
}
}
3.双重锁
public static class Singleton{
private static Singleton instance=null;
private Singleton(){
//do something
}
public static Singleton getInstance(){
if(instance==null){
synchronized(Singleton.class){
if(null==instance){
instance=new Singleton();
}
}
}
return instance;
}
}