首页 > 其他分享 >设计模式-单例模式概述

设计模式-单例模式概述

时间:2023-11-02 17:14:56浏览次数:40  
标签:实现 创建 实例 概述 单例 设计模式 加载

我们常把23种经典的设计模式分为三类:创建型结构型行为型,其中创建型设计模式主要解决“对象的创建”问题,将创建和使用代码解耦,结构型设计模式主要解决“类或对象的组合或组装”问题,将不同功能代码解耦,行为型设计模式主要解决“类或对象之间的交互”问题,将不同的行为代码解耦。

原理

是一种创建型模式,一个类只允许创建一个实例对象,那这个类就是个单例类。

实现

①构造函数私有化,避免外部通过new创建实例;

②考虑对象创建时的线程安全问题;

③考虑是否支持延迟加载;

④考虑getInstance()性能是否高(是否加锁)

⑤考虑序列化和反序列化是否会破坏单例

⑥考虑反射攻击单例

饿汉式

饿汉式的实现方式,在类加载期间,就已经将instance静态实例初始化好了,所以instance实例的创建是线程安全的。不过这样的实现不支持延迟加载实例。 | 懒汉式相对于饿汉式的优势是支持延迟加载。这种实现方式会导致频繁加锁、释放锁,以及并发度低等问题,频繁的调用会产生性能瓶颈。

懒汉式

懒汉式相对于饿汉式的优势是支持延迟加载。这种实现方式会导致频繁加锁、释放锁,以及并发度低等问题,频繁的调用会产生性能瓶颈。

双重检测

双重检测实现方式既支持延迟加载、又支持高并发的单例实现方式。只要instance被创建之后,再调用getInstance()函数都不会进入到加锁逻辑中。所以这种方式解决了懒汉式并发度低的问题。(解决指令重排序,可以给instance成员变量加上volatile关键字)

静态内部类

利用 Java 的静态内部类来实现单例。这种实现方式,既支持延迟加载,也支持高并发,instance的唯一性,创建过程的线程安全性,都由JVM保证。实现起来比双重检测简单。

枚举

最简单的实现方式,基于枚举类型的单例实现。这种实现方式通过Java枚举类型本身的特性,保证了实例创建的线程安全性和实例的唯一性。还可解决序列化和反序列化生成新的实例。

应用场景

从业务概念上,有些数据在系统中应该保存一份,就比较适合设计为单例类。比如,系统的配置信息类,除此之外,还可以使用单例解决资源访问冲突的问题(分布式锁和并发队列亦可解决)。

存在问题

  • 单例对OOP特性支持不友好;
  • 单例会隐藏类之间的依赖关系;
  • 单例对代码扩展性不友好;
  • 单例对代码的可测试性不友好;
  • 单例不支持有参数的构造函数。

替代方案

静态方法(不推荐)、工厂模式、Spring IOC容器

作者:京东零售 马宏伟

来源:京东云开发者社区 转载请注明来源

标签:实现,创建,实例,概述,单例,设计模式,加载
From: https://www.cnblogs.com/Jcloud/p/17805034.html

相关文章

  • TSINGSEE智慧安防:AI人员入侵检测算法的工作原理及应用场景概述
    人员入侵检测算法基于视频分析技术,自动对视频画面进行分析识别,可以对危险区的人员闯入、靠近等行为进行实时进行检测并预警,无需人工干预,协助管理者对场所的安全问题进行监管,可以广泛运用在学校、园区、工地、车站、地铁、厂区等地方。旭帆科技AI智能分析网关是基于边缘计算技术......
  • tsne、umap可视化简单例子
    importnumpyasnpfromsklearn.manifoldimportTSNEfromsklearn.decompositionimportPCAimportmatplotlib.pyplotaspltimportumapimporttorchX=torch.load('embeddings.pt')#(19783,16)y=np.load('labels.npy')#reduced_x=......
  • 数据抽样技术全面概述
    抽样是研究和数据收集中不可或缺的方法,能够从更大数据中获得有意义的见解并做出明智的决定的子集。不同的研究领域采用了不同的抽样技术,每种技术都有其独特的优点和局限性。本文将深入探讨了最常见的抽样技术,包括随机抽样、分层抽样、系统抽样、聚类抽样和便利抽样,并重点介绍了它......
  • 每日总结Java设计模式之原型模式
    今天完成了设计模式的原型模式实验用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节简单说就是先创建一个原型类实例,然后通过克隆的方法来复制一个一样的新对象,这个对象和原来......
  • 每日总结Java设计模式之单例模式
    今天做了单例模式的实验代码在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。单例模式有3个特点:单例类只有一个实例对象;该单例对象必须由单例类自行创建;单例类对外提供一个访问该单例的全局访问点;1.单例模式的......
  • 高斯数据库HCNA之数据库技术概述
    一、数据库技术概述数据库从诞生之日至今已经60年,从早起单纯的对数据文件的保存和处理,发展出以数据建模和数据库管理系统核心技术为主的一门内容丰富的学科,成为现代计算机应用系统的基础和核心,伴随着互联网、大数据、人工智能等技术的蓬勃兴起,数据库技术和产品更是百花齐放,带动了......
  • Flyweight 享元模式简介与 C# 示例【结构型6】【设计模式来了_11】
    〇、简介1、什么是享元模式?一句话解释:  将相似或同类的对象共享同一个对象,将这些对象暂存在列表中,使用时直接取出,避免每次使用时都要新建浪费资源。享元模式的目的是减少对象的创建,通过共享对象来提高系统的性能。享元设计模式将对象的实例分为两种:内部共享对象和外部共享对......
  • 中国方言概述
        我国是一个多民族、多语言、多方言、多文种的国家,共有56个民族。根据学术界通常的说法,有80种以上语言,30种左右文字。国家的通用语言文字是普通话和规范汉字,普通话就是普遍和通用的语言的意思。    汉语是我国使用人数最多的语言,也是世界上使用人数最多的语言,是......
  • 知识图谱与大模型结合方法概述
    《UnifyingLargeLanguageModelsandKnowledgeGraphs:ARoadmap》总结了大语言模型和知识图谱融合的三种路线:1)KG增强的LLM,可在LLMs的预训练和推理阶段引入KGs;2)LLM增强KG,LLM可用于KG构建、KGembedding、KG补全、基于KG的文本生成、KBQA(基于图谱的问答)等多种场景;3)LLM+KG协同使......
  • 设计模式(Design Pattern)记忆
    创建型记忆口诀:创公园,但见愁创工原,单建抽创建型工厂方法FactoryMethod原型Prototype单例Singleton建造者Builder抽象工厂AbstractFactory结构型记忆口口诀:姐想外祖,世代装桥结享外组,适代装桥结构型:享元Flyweight外观Facade组合Composite适配器Adapter装饰Decorat......