一、单例模式
1.是确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
2.某个类只能有一个实例。
3.类必须自行创建这个实例。
4.以公共、统一的方式向整个系统提供这个实例。
二、单例模式的实现—饿汉式
//饿汉式:牺牲了空间资源,节约了时间效率,因为是立即加载。
public class HungrySingleton {
private static HungrySingleton hungry_instance=new HungrySingleton();//用static修饰创建的对象,表示属于类,被类共享,只有一份。
private HungrySingleton() { //构造方法私有化,外部不能创建此对象了。
}
public static HungrySingleton getInstance() { //提供公有静态的方法获得实例对象,静态方法属于类的,通过类名.方法名访问
return hungry_instance;
}
}
三、单例模式-懒汉式
//懒汉式:节省了空间,降低了时间效率。
//延时加载,真正用到的时候再创建
public class LazySingleton {
private static LazySingleton instance;//类初始化时,不初始化这个对象。
private LazySingleton() {//私有化构造方法,是为了不让外部创建对象。
}
public synchronized static LazySingleton getInstance() {//静态方法,可以通过类名访问
if(instance==null) { //当没有实例对象时,才创建实例对象
instance=new LazySingleton();
}
return instance;
}
}
四、单例模式-静态内部类的懒汉式
//优化后的懒汉式:节省了空间,降低了时间效率。
//静态内部类形式,即实现了线程安全,又避免了同步带来的性能影响。
public class LazySingleton2 {
private static class Inner{ //静态内部类,初始化只有一次。
private static final LazySingleton2 instance=new LazySingleton2();
}
private LazySingleton2() {//私有化构造方法,是为了不让外部创建对象。
}
public static LazySingleton2 getInstance() {//线程安全,调用效率高,并且不会在外部类初始化时就直接加载,只有当调用了方法时才会加载,实现了延迟加载。
return Inner.instance;
}
}