首页 > 其他分享 >设计模式之单例模式

设计模式之单例模式

时间:2023-06-28 23:45:30浏览次数:26  
标签:设计模式 private static 模式 单例 SingletonTwo public

很重要的一个设计模式!!

介绍:
它和工厂模式一样,都属于创建型模式,用于类进行初始化。
单例模式保证一个类只会被实例化一次。

1. 线程安全的懒汉单例模式

public class SingletonTwo {
    private volatile static SingletonTwo singletonTwo;

    private SingletonTwo() {
    }

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

2. 饿汉式单例模式

public class SingletonThree {
    private static SingletonThree singletonOne = new SingletonThree();

    private SingletonThree() {
    }

    public static SingletonThree getInstance() {
        return singletonOne;
    }
}

3. 内部静态类方式

public class SingletonFour {

    private SingletonFour() {
    }

    public static SingletonFour getInstance() {
        return SingletonHolder.singletonFour;
    }

    private static class SingletonHolder{
        private static final SingletonFour singletonFour = new SingletonFour();

    }
}

总结:

  1. 饿汉式非线程安全;
  2. 懒汉式线程安全(双重检查模式);
  3. 饿汉式单例模式;
  4. 内部静态类方式。

单例模式虽然简单,但是想写的严谨,还是需要考虑周全。实际使用中,推荐使用双重检查模式和内部静态类方式。如果实例在你的程序初始化阶段就会被使用,也可以使用饿汉式。非线程安全的懒汉式只能用于非并发的场景,局限性比较大,并不推荐使用。

标签:设计模式,private,static,模式,单例,SingletonTwo,public
From: https://www.cnblogs.com/techgy/p/17506748.html

相关文章

  • 解决使用锐捷网络时CentOS7在网络适配器为NAT模式下无法联网的问题
    原因:锐捷网络会反复自动关闭该服务解决方法:1.使用脚本保持自动打开nat服务2.锐捷客户端下虚拟机VMware无法联网的问题(本人没有尝试过该方法)......
  • 深入浅出设计模式 - 中介者模式
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌Java知识图谱点击链接:体系化学习Java(Java面试专题)......
  • 181_带你体验 Power BI 开发者模式 pbip
    181_带你体验PowerBI开发者模式pbip一、背景如果你是一个PowerBI重度用户,你是不是也有如下的情况?是的,PowerBI的版本控制全靠复制一份重命名来实现,而且版本之间的特点和差异时间久了就不记得了,还要加上一个版本的说明文件。(手动痛苦的表情)当然期间也有一些工具可以......
  • 创建模式-抽象工厂
    #创建型模式-抽象工厂模式#在工厂抽象类中有多个创建对象的方法,fromabcimportABCMeta,abstractmethodclassIApple(metaclass=ABCMeta):@abstractmethoddefshow(self):passclassHFSApple(IApple):defshow(self):print("红......
  • git 入门、reset的3种模式、回滚文件、还原文件、变基、merge
    git基础知识盗用网上的一张图,git有工作目录、索引区(也叫暂存区)、历史区,这3个区,一定要记在脑子里,基本上git所有的操作都是操作这3个区。新建一个文件并提交的一般操作是,新建文件gitadd到索引区gitcommit到历史区(添加-a参数会自动提交到索引区,相当于第2步+第3步)gitreset有3种......
  • 创建型模式-工厂方法模式
    #创建型模式-工厂方法模式#相对于简单工厂模式,如果添加了新的动物类,对用的工厂方法需要一并修改违反了开闭原则,#因此工厂方法模式,新增了抽象工厂类,将具体工厂进行隔离满足开闭原则fromabcimportABCMeta,abstractmethodclassIAnimal(metaclass=ABCMeta):@ab......
  • 简析电力用户预付费模式转变及前景
    罗轩志安科瑞电气股份有限公司上海嘉定201801【摘要】随着电力市场发展水平的不断提高以及电力体制改革事业的不断推进,电力企业面临的电费回收风险越来越大,管理也更加复杂。积极采用电力用户预付费模式,促进预付费系统的建设,不仅能够提升企业的电力服务水平,同时也大大降低了运营风......
  • 面试别瞎背题了!八月冲刺不要毁在传统一问一答的模式里,这份Android面试准备计划助你事
    背景这阵子,各大网络社交平台,刷到最多的就是面试求职相关的信息。这位网友在脉脉职言求助。本科毕业三年了,一直做安卓开发,请问跳槽找工作要怎么准备呢?写代码三年月薪不到一万是不是很失败?近日,还有程序员就因为这个问题在某职场社交软件上,被认证了的百度京东员工一顿嘲讽。找工作不可......
  • 精选Android中高级面试题:性能优化,JNI,设计模式
    性能优化1、图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?参考回答:首先我们要清楚图片的三级缓存是如何的:如果内存足够时不回收。内存不够时就回收软引用对象2、内存中如果加载一张500*500的png高清图片。应该是占用多少的内存?不考虑屏幕比的话:占用内存......
  • 创建模式-简单工厂模式
    fromabcimportABCMeta,abstractmethodclassAnimal(metaclass=ABCMeta):@abstractmethoddefsay(self):passclassDog(Animal):defsay(self):print("汪汪")classCat(Animal):defsay(self):print(&......