1.单例设计模式:
解决问题:就是可以保证一个类在内存中的对象的唯一性,对多个程序使用同一个配置对象时,就需要保证该对象的唯一性!
2.如何保证对象的唯一性:
1.不允许其他的程序用New创建该类对象
2.在该类中创建一个本类实例
3.对外提供一个方法让其他程序可以获取该对象
3.步骤:
1.私有化该类的构造函数
2.通过new 在本类中创建一个本类的私有化静态对象
3.定义一个公有方法将该对象返回
/** * * @类名: 单例模式 * @功能: TODO * @作者: Allen * @日期:2014-10-27 下午10:37:34 */ class Single { private static Single aSingle = new Single(); private Single(){}; public static Single getInstance() { return aSingle; } }
但是以上实现没有考虑线程安全问题。所谓线程安全是指:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。显然以上实现并不满足线程安全的要求,在并发环境下很可能出现多个Singleton实例。
1.饿汉式单例类
/** * @类名: 饥饿式单例模式,在类创建时,就已经实例化 */ class SingleDemo { private static SingleDemo SingleInstance = new SingleDemo(); private SingleDemo(){}; public static SingleDemo getInstance(){ return SingleInstance; } }
2.懒汉式单例模式
/** * @类名: //懒汉式单例类.在第一次调用的时候实例化 */ class SingleInstance { private static SingleInstance SingleInstance ; private SingleInstance(){}; public static SingleInstance getInstance(){ if (SingleInstance==null) { SingleInstance = new SingleInstance(); } return SingleInstance; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。(转载请注明出自 AllenCoder)