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

设计模式

  • 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;
    }

}
相关推荐
workflower18 分钟前
室内外配送机器人-应用路径
人工智能·机器学习·设计模式·矩阵·自动化
ttod_qzstudio7 小时前
【软考设计模式】原型模式:“克隆“对象与深拷贝、浅拷贝精讲
设计模式·原型模式
geovindu7 小时前
java: Builder Pattern
java·开发语言·后端·设计模式·建造者模式·生成器模式
researcher-Jiang18 小时前
Design Patterns——Template Method入门到情景实战
python·设计模式·模板方法模式
饼干哥哥1 天前
用Claude Code跑通跨境电商的5大场景,顶10个人的团队
人工智能·设计模式·正则表达式
折哥的程序人生 · 物流技术专研1 天前
第3篇:手写促销策略引擎(满减、打折、立减)
java·设计模式·策略模式·开闭原则·编程实战·扩充系列·促销引擎
折哥的程序人生 · 物流技术专研1 天前
第3篇:手写一个饮品制作模板(附代码)
java·设计模式·行为型模式·模版方法模式·钩子方法·代码复用·编程实战
ttod_qzstudio1 天前
【软考设计模式】单例模式:唯一实例的管控与线程安全精讲
单例模式·设计模式
折哥的程序人生 · 物流技术专研1 天前
第4篇:模板方法 vs 策略模式,面试怎么选?
java·设计模式·策略模式·行为型模式·模版方法模式·扩充系列·继承v组合
小园子的小菜1 天前
Java设计模式精讲:创建型+结构型模式(含生产级案例+相似模式对比)
学习·设计模式