以上为单例模式的简单写法,通过私有化构造方法控制一个类只有一个实例对象。
单例模式有饿汉式和懒汉式,上述为饿汉式。
public class Singleton{
private static Singleton singleton = null;
public static getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
上述为懒汉式。
饿汉式是线程安全的,在类加载的同时就已经创建好一个静态的对象供系统使用,以后不在改变。加载类的时候比较慢,但运行时获得对象的速度比较快。它从加载到应用结束会一直占用资源。用空间换时间。
懒汉模式,在需要对象的时候,才判断是否已有对象,如果没有就立即创建一个对象,然后返回,如果已有对象就不再创建,立即返回。
懒汉模式只在外部对象第一次请求实例的时候才去创建。但懒汉式是线程不安全的,需要用synchronized关键字。用时间换空间。
public class Singleton{
private static Singleton singleton = null;
public static synchronized getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
但是使用synchronized关键字是比较低效的,做进一步改进。