一.单例模式
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,
核心要素就是将构造方法私有化
主要应用就是确保一个类只有一个实例存在,如序列号生成器和web页面计数器等,
还有就是某个对象需要消耗较多资源,如访问IO或数据库资源时使用单例模式减少资源消耗
单例模式又分为饿汉式和懒汉式
二.饿汉式
在类加载时就进行实例化
由于该类的实例在创建类时就已构造好了,故所有方法获取的对象都是同一个
/**
* 饿汉式
*/
class Singleton1{
private static Singleton1 singleton = new Singleton1();//实例化
private Singleton1(){}
public static Singleton1 getInstance(){
return singleton;
}
}
三.懒汉式
在第一次获取该实例的时候才构造该对象
但是如果第一次调用过后就不再创建新对象了,故获取的对象也是同一个.
但懒汉式线程不安全,举个例子,如果a,b线程同时执行方法会构造两个实例,所以得加锁,关于线程安全问题可以看我这篇文章多线程的安全问题一:同步方法与同步代码块
/**
* 懒汉式
*/
class Singleton2{
private static Singleton2 singleton = null;
private Singleton2(){}
public synchronized static Singleton2 getInstance(){
if(singleton == null)
singleton = new Singleton2();
return singleton;
}
}