当前位置: 首页 > article >正文

设计模式-----单例设计模式

设计模式

  • https://www.runoob.com/ 这上面有很多东西很好。

  • 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

  • 就是很多个总结了经验,写出了一套优秀的代码。可以在很多地方实现低耦合、高内聚。代码移植性高,可重用性强的。

1、单例设计模式

  • 在整个应用系统中,只有一个实例对象
    • 优点:节省内存,可以复用
    • 缺点:有线程安全问题

2、实现方式

  • 懒汉式:线程不安全的
  • 懒汉式:线程安全【双重校验锁】
  • 饿汉式:天生线程安全的

2.1 懒汉式

  • 实现步骤

    • 创建一个类
      • 构造器私有
      • 创建一个私有的静态的实例对象,不用赋值
      • 创建一个公有的静态的返回实例对象的方法
  • 具体实现

    • 线程非安全的
    package com.sw.java2024.pojo;
    
    /**
     * 懒汉式
     *  有线程安全问题
     **/
    public class Singleton01 {
    
        //- 构造器私有
        private Singleton01(){}
    
        //- 创建一个私有的静态的实例引用,不用赋值
        private static Singleton01 singleton = null;
    
        //- 创建一个公有的静态的返回实例对象的方法
        public static Singleton01 getInstance(){
            if(singleton == null) {
                singleton = new Singleton01();
            }
            return singleton;
        }
    
    }
    
    
    • 线程安全【双重校验锁】
    package com.sw.java2024.pojo;
    
    /**
     * 懒汉式
     *  解决线程安全问题
     **/
    public class Singleton02 {
    
        //- 构造器私有
        private Singleton02(){}
    
        //- 创建一个私有的静态的实例引用,不用赋值
        //volatile : 能够禁止指令重排
        private static volatile Singleton02 singleton = null;
    
        //- 创建一个公有的静态的返回实例对象的方法
        //双重校验锁:OK,禁止指令重排
        public static Singleton02 getInstance(){
            if (singleton == null) {
                synchronized (Singleton02.class) {
                    if(singleton == null) {
                        singleton = new Singleton02();
                    }
                }
            }
            return singleton;
        }
    
    }
    

2.2 饿汉式

  • 优点:线程安全
  • 缺点:会造成一定内存浪费
  • 实现步骤
    • 创建一个类
      • 构造器私有
      • 创建一个私有的静态的实例对象,直接赋值
      • 创建一个公有的静态的返回实例对象的方法
package com.sw.java2024.pojo;

/**
 * 饿汉式
 *  线程安全
 **/
public class Singleton03 {

    //- 构造器私有
    private Singleton03(){}

    //- 创建一个私有的静态的实例引用,直接赋值
    private static Singleton03 singleton = new Singleton03();

    //- 创建一个公有的静态的返回实例对象的方法
    public static Singleton03 getInstance(){
        return singleton;
    }

}

http://www.kler.cn/a/510796.html

相关文章:

  • 【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格
  • 飞牛 使用docker部署Watchtower 自动更新 Docker 容器
  • Sqlmap入门
  • 【SPIE出版|EI、Scopus双检索】2025年绿色能源与环境系统国际学术会议(GEES 2025)
  • JavaWeb简单开发
  • mysql 与Redis 数据强一致方案
  • Visual Studio Code + Stm32 (IAR)
  • rocketmq基本架构
  • SpringBoot Maven 项目 pom 中的 plugin 插件用法整理
  • 有效的括号(力扣20)
  • 【Vue3进阶】Pinia 中的 Store 组合式写法
  • FreeRTOS 核心模块初步学习总结与优化
  • kubernetes学习-Ingress(八)
  • vim文本编辑器三种模式的转换关系
  • 【机器学习实战中阶】比特币价格预测
  • Linux运维篇-PAM安全模块配置
  • Asp.Net Core 8.0 使用 Serilog 按日志级别写入日志文件的两种方式
  • USART_串口通讯中断案例(一)(寄存器实现)
  • 缓存商品购物车
  • 【Red Hat8】:搭建DNS和Apache服务器
  • SDL2:arm64下编译使用 -- SDL2多媒体库使用音频实例
  • C++,设计模式,【目录篇】
  • 【C++课程学习】:C++中的IO流(istream,iostream,fstream,sstream)
  • Jenkinsfile共享库介绍
  • Apache Hive--排序函数解析
  • Vue uni-app免手动import