设计模式之单例模式

目录

1.定义:

  1.1 懒汉模式

1.2 饿汉模式:

1.3 静态内部类

2.应用场景

3.实例如下

传送门:

项目中用到的责任链模式

给对象讲工厂模式,必须易懂易会

策略模式,工作中你用上了吗?


1. 定义

单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模式的一种。 在应用这个模式时,单例对象的类必须保证只有一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。

  1.1 懒汉模式

    延迟加载,只有在真正使用的时候,才开始实例化。

1.线程安全问题
2.double check 加锁优化
3.编译器(JIT),CPU 有可能对指令进行重排序,导致使用到尚未初始化的实例,可以通过添加volatile 关键字进行修饰对于volatile 修饰的字段,可以防止指令重排.

1.2 饿汉模式:

类加载的 初始化阶段就完成了 实例的初始化 。本质上就是借助于jvm类加载机制,保证实例的唯一性.类加载过程:

1,加载二进制数据到内存中,生成对应的Class数据结构
2.连接: a.验证,b.准备 (给类的静态成员变量赋默认值),c.解析
3.初始化: 给类的静态变量赋初值3 

只有在真正使用对应的类时,才会触发初始化 如(当前类是启动类即main函数所在类,直接进行new 操作,访问静态属性、访问静态方法,用反射访问类,初始化一个类的子类等。

1.3 静态内部类

1.本质上是利用类的加载机制来保证线程安全
2.只有在实际使用的时候,才会触发类的初始化,所以也是懒加载的一种形式

2.应用场景

单例模式只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对。

3.实例如下

package com.onlyqi.test07;

public class Test11 {

    public static void main(String[] args) {
        new Thread(()->{
            Singleton singleton = Singleton.getInstance();
            System.out.println(singleton);
        });
    }


}
// 懒汉模式
class Singleton {
    private volatile static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class){
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

// 饿汉模式----借助类加载保证单例
class Hungrysingleton {
    private static Hungrysingleton instance = new Hungrysingleton();

    private Hungrysingleton() {
    }
        public static Hungrysingleton getInstance () {
            return instance;
        }

}

传送门:

项目中用到的责任链模式

给对象讲工厂模式,必须易懂易会

策略模式,工作中你用上了吗?

设计模式之门面模式(外观模式)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

only-qi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值