最长用设计模式-单例模式,常用的有三种实现方式:
饿汉式,懒汉式, 登记式
1. 饿汉式:在变量声明时实例化对象。(线程安全)
2.懒汉式: 在变量用的时候实例化对象,线程不安全,需要加锁。
3.登记式:在对象内部维护一个map集合,对象实例时初始化map,并把对象实例放
到map中,第次从map中取对象。
==================================================================
/**
* 饿汉式
*
* @author jiangwei
*
*/
public class SingleInstance1 {
//1.实例化对象
private static SingleInstance1 instance = new SingleInstance1();
//2.私有化构造方法
private SingleInstance1() {
}
//3.暴露getInstance方法
public static SingleInstance1 getInstance() {
return instance;
}
}
======================================================================
/**
* 懒汉式
* @author jiangwei
*
*/
public class SingleInstance2 {
//1.声明对象
private static SingleInstance2 instance = null;
//2.私有化构造方法
private SingleInstance2() {
}
//3.暴露getInstance方法
public synchronized static SingleInstance2 getInstance() {
if(instance == null) {
//实例化对象
instance = new SingleInstance2();
}
return instance;
}
}
==============================================================
/**
* 3.登记式 : 单例容器
* @author jiangwei
*
*/
public class SingleInstance3 {
private static Map<String, Object> map = new HashMap<String, Object>();
private SingleInstance3() {};
public static Object getInstance(String key) {
if(map.get(key) == null) {
try {
Object object = Class.forName(key);
map.put(key, object);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return map.get(key);
}
}