常见代理模式(未完待续)
创始人
2024-05-24 12:09:16
0

这里写目录标题

  • 创建型模式
    • 一. 单例模式
      • 1.1 饿汉式
        • (1)静态成员变量
        • (2)静态代码块
      • 1.2 懒汉式
        • (1)线程不安全
        • (2)线程安全(synchronized)
        • (3)线程安全(双重检查锁)

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、提高代码的可靠性。

创建型模式

一. 单例模式

单例模式属于创建型模式;

单例模式保证两点:
①只能他自己创建这个类的对象,
②只能创建一个对象;

保证第一点
构造是私有的,只能由自己去创建本类对象;同时这个类提供了一种公共的访问其唯一的对象的方式,外界不需要去实例化该类的对象;

保证第二点
单线程:类中的成员变量为static的,类加载时,静态变量是唯一的,所以保证只创建一个对象;
多线程:使用 synchronized 锁来保证;

1.1 饿汉式

饿汉式:类加载导致单例对象被创建;

实现步骤

  1. 创建私有构造方法,保证①只能自己创造对象
  2. 在本类创建本类对象,为static静态,保证②只能创建一个
  3. 提供公共访问方法,让外界获取对象

(1)静态成员变量

在这里插入图片描述

(2)静态代码块

在这里插入图片描述

1.2 懒汉式

懒汉式:类加载不会导致该单例对象被创建,而是首次使用该对象时才会创建

(1)线程不安全

实现步骤

  1. 创建私有构造方法,保证①只能自己创造对象
  2. 在本类创建本类对象,为static静态,保证②只能创建一个
  3. 提供公共访问方法,让外界首次使用时创建对象
    在这里插入图片描述
    问题:当有多个线程调用getInstance方法时,就可能创造多个对象,所以线程不安全;

(2)线程安全(synchronized)

要保证线程安全,就要保证创造对象的那个方法具有原子性;即同一时刻只能有一个线程去访问资源;
这里使用 Synchronized 同步锁;
在这里插入图片描述

(3)线程安全(双重检查锁)

由于懒汉模式中,getInstance方法大部分是读操作,读操作是线程安全的,所以没必要让每个线程都必须持有锁才能调用该方法,所以调整加锁的时机,由此产生了一种新的实现模式:双重检查锁模式;

注意
这里要防止空指针异常,所以对实例变量使用 volatile 关键字修饰,保证可见性和禁止指令重排;
在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...