03 浅谈【创建型】单例模式 理解与使用

单例模式

大白话:所谓单例模式,就是这个类在你的系统中只作为一个的存在,是为了防止重复的创造对象、销毁对象所带来的内存的开销。并且在这个类当中提供一个全局访问点

主要解决:一个全局使用的类频繁地创建与销毁。

何时使用:当您想控制实例数目,节省系统资源的时候。

 

灵魂画师,还是得用画图的方式,说明这个道理,图形理解,我觉得这是最好认识与理解的方式

我们都知道,Windows 系统有一个全局任务管理器,使用快捷键Ctrl + Shift + Esc 即可调用出任务管理器,

任务管理器在系统启动后,只会存在一个,当用户使用快捷键,就是调用系统的一个全局访问点,通过这个访问点,系统回传任务管理器给我们的用户,

这就是最基本的一个单例模式,特点:全局只有一个,提供全局访问点用于调用单例、以及构造方法私有(只可由系统本身创建)

 

再举个栗子:

大家都知道我们用SpringBoot作为服务端,向前台返回数据的时候,一般返回的都是JsonObject

这个Object所有的控制器返回数据都可以用到,我们这里就可以考虑用单例模式来初始化这个类,

单例模式在这里分为好几个模块;

  • 懒汉式
  • 饿汉式(最常用)在初始化类的时候就初始化成员变量
public class JsonObject {

    private static Map<String,Object> map = new HashMap<>(16);

    //构造方法私有
    private JsonObject(){}

    //提供全局访问点 synchronized(线程安全)
    public static synchronized Object resultOk(Object data){
        map.clear();

        map.put("status","ok");
        map.put("data",data);
        map.put("msg","请求成功");

        return map;
    }

    //提供全局访问点
    public static synchronized Object resultError(String msg){
        map.clear();

        map.put("status","ok");
        map.put("data",null);
        map.put("msg",msg);

        return map;
    }

}

 

我们尝试这调用

    public static void main(String[] args) {
        System.out.println(JsonObject.resultError("密码不能为空"));
        System.out.println(JsonObject.resultOk("192.168.0.1"));
    }

 

 

这样就完成了一个饿汉式(常用)的一种单例模式

posted @ 2019-10-31 21:59  程序猿小码  阅读(161)  评论(0编辑  收藏  举报