所谓的单例模式是指单个实例单即单个的意思例乃实例的意思就是一个类生成的对象因此单例模式的功能作用就是保证一个类只生成一个对象是在代码级的实现不是人工维护的
单例模式的实现需要以下两个步骤
单例类有一个存贮单例的私有属性
单例类的构造方法必须是私有的
单例类要有获取单例类实例的静态方法
单例类示例
饿汉式单例代码
package comtaopatternsingleton;
/**
* @author TaoistWar
*
*/
public class Singleton {
// 单例类有一个存贮单例的私有属性
private static Singleton singleton = new Singleton();
// 单例类的构造方法必须是私有的
private Singleton() {
}
// 单例类要有获取单例类实例的静态方法
public static Singleton getInstance() {
return singleton;
}
}
懒汉式单例代码
package comtaopatternsingleton;
/**
*
* @author TaoistWar
*
*/
public class LazySingleton {
// 单例类有一个存贮单例的私有属性
private static LazySingleton singleton;
// 单例类的构造方法必须是私有的
private LazySingleton() {
}
// 单例类要有获取单例类实例的静态方法
public synchronized static LazySingleton getInstance() {
if (singleton == null) {
singleton = new LazySingleton();
}
return singleton;
}
}
比较
饿汉式单例加载时生成单例获取单例时不需要考虑多线程
懒汉式单例调用时生成单例获取单例时如果多线程需要加synchronized锁定方法以保证单例
结论
因为在我们的开发中如果使用单例模式肯定会用到废话!呵呵所以每次调用加个synchronized锁的效率没有不加高因此推荐第一种直接在私有属性中生成实例