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

设计模式

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

}
相关推荐
码匠许师傅5 小时前
【设计模式精讲】26.策略模式(Strategy)
c++·设计模式·策略模式·uml
Ysx7 小时前
AI 问答不再"一本正经地胡说":30 轮提示词迭代,沉淀 4 条防幻觉铁律
设计模式
码匠许师傅8 小时前
【设计模式精讲】25.状态模式(State)
c++·ui·设计模式·状态模式·uml
geovindu10 小时前
java:Observer Pattern
java·开发语言·后端·观察者模式·设计模式·行为模式
码匠许师傅1 天前
【设计模式精讲】24.观察者模式(Observer)
c++·观察者模式·设计模式·uml
小程故事多_801 天前
从快速迭代到稳定存续,Google五大设计模式重构长效AI智能体落地逻辑
人工智能·设计模式·重构
码匠许师傅2 天前
【设计模式精讲】22.中介者模式(Mediator)
c++·设计模式·软件工程·uml·中介者模式
2401_868534782 天前
网规备考_2.4 路由协议
c++·设计模式
cpp_learner2 天前
C++ 实现责任链模式(Chain of Responsibility):从一堆 if-else 到可插拔的处理管道
c++·设计模式
码匠许师傅2 天前
【设计模式精讲】23.备忘录模式(Memento)
c++·设计模式·软件工程·uml·备忘录模式