• 单例设计模式


    @

    一、概念叙述

    单例模式是一种常用的软件设计模式,使用单例模式,可以保证为一类只生成唯一的实例对象。也就是说,整个程序空间中,该类只存在一个实例对象。

    二、先看个问题

    我们通常在实例化对象是,通常是通过去new构造器方法获取一个类的实例化对象。这样就会出现一个问题:那就是每次创建的实例对象的内存地址都不一样。

    public class Student {
    	private String name;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    }
    

    在这里插入图片描述
    接下来单例模式就可以解决这个问题。

    三、单例模式实现

    (一)、饿汉模式

    package 单例模式;
    /**
     * 饿汉模式
     * 1、初始化类对象
     * 2、私有化构造器
     * 3、通过静态方法还会
     */
    public class Student {
    //	初始化对象,当类加载时,就已经把student对象加载到了内存中
    	private static Student student = new Student();
    	private String name;
    //	第一步私有化构造器
    	private Student() {
    		
    	}
    //	通过静态方法返回对象
    	public static Student getInstance() {
    		return student;
    	}
    }
    

    在这里插入图片描述
    饿汉模式特点: 执行效率较高,会占用稍稍占用一点内存空间

    (二)、懒汉模式

    package 单例模式;
    /*
     * 懒汉式
     * 1、先去创建对象
     * 2、私有化构造
     * 3、静态方法实例化对象,并返回
     * */
    public class Student1 {
    //	先创建对象,不去实例化对象
    	private static Student1 student1 = null;
    //	私有构造
    	private Student1() {
    		
    	}
    //	静态方法返回对象
    	private static Student1 getInstance() {
    //		当该方法被调用的时候再去实例化对象
    		if(student1 == null) {
    			student1 = new Student1();
    		}
    		return student1;
    	}
    
    }
    

    在这里插入图片描述
    懒汉模式特点: 懒汉模式不支持多线程,只支持单线程,不能保证线程的安全性

    (三)、双重校验锁

    双重校验锁就是解决懒汉模式不支持多线程的问题,我们来分析一下为什么懒汉模式不支持多线程!
    在这里插入图片描述
    双重校验锁
    在这里插入图片描述
    具体实现

    package 单例模式;
    /*
     * 双重校验锁
     * */
    public class Student1 {
    //	先创建对象,不去实例化对象
    	private static Student1 student1 = null;
    //	私有构造
    	private Student1() {
    		
    	}
    //	静态方法返回对象
    	public static Student1 getInstance() {
    //		当该方法被调用的时候再去实例化对象
    		if(student1 == null) {
    //			设置同步代码块
    			synchronized (Student1.class) {
    //				再一次进行判断
    				if(student1 == null) {
    					student1 = new Student1();
    				}
    			}
    		}
    		return student1;
    	}
    
    }
    ~~~![在这里插入图片描述](https://img-blog.csdnimg.cn/20200402144821143.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDY3NjkzNQ==,size_16,color_FFFFFF,t_70)
  • 相关阅读:
    springboot2.X动态修改log4j2日志级别
    iframe嵌套PMM2.0
    grafana配置告警
    prometheus+grafana配置流程
    kubernetes拉取私有镜像仓库的镜像
    Windows Server 2016离线安装.NET Framework 3.5
    Office批量授权(VL)版本和激活方法
    华为USG防火墙配置NAT映射回流解决内网通过公网映射访问内部服务器
    IRF配置
    CENTOS7安装各种桌面系统 CENTOS安装桌面图形化GUI GNOME/KDE/Cinnamon/MATE/Xfce
  • 原文地址:https://www.cnblogs.com/geq2020/p/12630272.html
Copyright © 2020-2023  润新知