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

设计模式

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

}
相关推荐
世洋Blog2 小时前
装饰器模式实践:告别臃肿的继承链,优雅解耦初始化状态管理
unity·设计模式·c#·装饰器模式
syt_10133 小时前
设计模式之-工厂模式
javascript·单例模式·设计模式
syt_10136 小时前
设计模式之-装饰器模式
设计模式·装饰器模式
看见繁华7 小时前
C++ 设计模式&设计原则
java·c++·设计模式
雨中飘荡的记忆11 小时前
观察者模式:从理论到生产实践
java·设计模式
阿波罗尼亚12 小时前
Head First设计模式(十二) 设计原则 复合模式
设计模式
老朱佩琪!12 小时前
Unity原型模式
开发语言·经验分享·unity·设计模式·原型模式
拾忆,想起12 小时前
设计模式三大分类完全解析:构建高质量软件的基石
xml·微服务·设计模式·性能优化·服务发现
老朱佩琪!12 小时前
Unity装饰器设计模式
unity·设计模式
syt_101313 小时前
设计模式之-策略模式
设计模式·bash·策略模式