首页 > 技术文章 > 单例模式

gxh299988 2021-02-05 15:58 原文

单例模式

目的

为了让一个类有且仅有一个实例

优点

  1. 只允许一个,节省空间

  2. 不用频繁创建删除,提高性能

缺点

  1. 不容易扩展
  2. 长期不使用会被系统当作垃圾回收,造成系统状态的丢失

实现

要点

  1. 只能有一个实例=》一个私有的构造函数
  2. 自己创建实例 =》在私有静态属性中进行声明(饿汉创建,懒汉声明)
  3. 提供这个实例 =》提供静态的公有方法创建和获取私有对象

代码

饿汉式

//饿汉式
public class SingletonTwo {
    //私有构造函数
    private SingletonTwo(){ 
    }
    //私有静态属性
    private static SingletonTwo instance=new SingletonTwo();
	//公共返回
    public static SingletonTwo getInstance(){
        return instance;
    }
}

每次调用前就实例化好了,空间换时间,提前加载以后调用更快

懒汉式

//懒汉式
public class SingletonOne {
    private SingletonOne(){

    }
    private static SingletonOne instance=null;

    public static SingletonOne getSingletonInstance(){
        if (instance==null)//一定要判断
            instance= new SingletonOne();
        return instance;
    }
}

只有每次调用的时候才会实例化,时间换空间,但是当多线程同时访问这个方法时,会存在危险

使用场景

  1. 对系统内资源同意读写的,配置文件,如mysql的名字,数据库名,账号密码
  2. 创建对象资源过多

推荐阅读