单例模式:确保一个类在内存中最多只有一个实例,并提供一个全局访问点
一、单例模式必备条件:
1.构造器私有化,杜绝外界使用new创建对象
2.获取单例对象的静态方法,多个线程来访问也是返回一个实例
二、使用场景
有些对象只需要创建一个,线程池、缓存、硬件设备;比如对于多个程序使用同一个配置信息对象时,就需要确保该对象的唯一性。
如何保证唯一性:
1)不允许其他程序用new创建该对象
2)在该类中创建一个本类实例
3)对外提供一个方法让其他程序可以获取该类对象
步骤:
1)私有化该类的构造函数
2)通过new在本类中创建一个本类对象
3)定义一个共有的方法,将创建的对象返回
三、代码演示,及优化
package com.qa.danli;
/**
* 经典单例模式
* 存在的问题:如果多线程多个实例会造成冲突,结果的不一致性等问题(比如第一个调用还没实例化完后第二个开始调用)
*/
public class DanLiFactory {
private static DanLiFactory uniqeInstance = null;
//构造器私有化,杜绝了外界使用new创建对象
private DanLiFactory(){
}
//获取单例对象的静态方法,多个线程来访问也是返回一个实例
public static DanLiFactory getInstance() {
if(uniqeInstance == null) {
uni