zoukankan      html  css  js  c++  java
  • 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"));
        }

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

  • 相关阅读:
    js第四天
    js第三天
    js第二天
    面试题集锦;有关作用域和this的指向
    JS高级:事件冒泡和事件捕获;
    关于函数的解析;
    BOM浏览器对象模型;
    关于js动画简单理解;
    关于document的节点;用Dom2创建节点;
    js操作Css样式
  • 原文地址:https://www.cnblogs.com/ChromeT/p/11774114.html
Copyright © 2011-2022 走看看