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

设计模式

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

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

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

1、单例设计模式

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

2、实现方式

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

2.1 懒汉式

  • 实现步骤

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

    • 线程非安全的
    java 复制代码
    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;
        }
    
    }
    • 线程安全【双重校验锁】
    java 复制代码
    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 饿汉式

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

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

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

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

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

}
相关推荐
workflower6 小时前
装备企业的 AI 路线图
人工智能·深度学习·机器学习·设计模式·机器人
geovindu16 小时前
CSharp:Chain of Responsibility Pattern
开发语言·后端·设计模式·c#·.net·责任链模式·行为模式
梓仁沐白18 小时前
【Agent 设计模式】多智能体协作
microsoft·设计模式·php
努力学习的廖同学18 小时前
前端进阶-设计模式
设计模式
workflower2 天前
情境感知系统
人工智能·机器学习·设计模式·自然语言处理·机器人
咖啡八杯2 天前
设计模式中的原则
设计模式·接口隔离原则·里氏替换原则·开闭原则·合成复用原则·单一职责原则
安冬的码畜日常2 天前
【工欲善其事】深入理解 Node.js 带并发上限的异步任务批量执行逻辑
javascript·设计模式·node.js·ai编程·异步编程·并发执行
AI大法师2 天前
一个机场如何被做成 IP 场景:宝可梦机场的设计方法总结
大数据·人工智能·设计模式·新媒体运营
晚安code2 天前
干掉成山的 if-else:工厂造、策略选,一文讲透两个模式的配合
后端·设计模式
workflower3 天前
从幻觉,到现实
人工智能·深度学习·机器学习·设计模式·机器人