首页 > 其他分享 >单例模式 上

单例模式 上

时间:2024-02-29 16:35:17浏览次数:22  
标签:代码 生成器 模式 单例 设计模式 构造函数

为什么要用单例

单例模式理解起来非常容易 一个类只允许创建一个对象(或者实例),那这个类就是一个单例,这种设计模式叫做单例设计模式。简称单例模式

1. 解决线程安全问题

2. 表示全局唯一

比如配置信息类,自系统中,我们只有一个配置文件,当这个配置文件加载到内存之后,以对象的形式存在,理所应当只用一份

比如Id 生成器,这里讲的时递增的id 生成器,如果程序有两个生成器,那么可能会存在重复的Id的情况

单例存在那些问题

单例模式,它时属于一种反模式,对于面向对象的四大特性的封装都不是特别的好。 它属于面向过程编程,有点硬编码的味道,违背了面向接口的编程

单例模式会隐藏类之间的依赖关系,我们一般通过构造函数,传参来表示类之间的依赖关系。但是单例模式不支持现实的创建,如果代码比较复杂,这种调用关系就会非常的隐蔽。在阅读代码的时候,需要仔细的查看每个函数的代码实现。 

对代码扩展性也不好,如果那天代码中需要创建多个实例,那么对代码的改动比较大。 

单例模式对代码的可测试性不好。 

单例模式不支持有参数的构造函数

有何替换的方案

我们刚刚提到单例模式有很多的问题,你可能会说,单例有那么多的问题,但我不用不行啊,我们业务上表示全局唯一类的需求,如果不用歌单里,我怎么才能保证这个类对象全局唯一呢? 

处理单例,我们还能用静态方法来实现。 这也是项目中项目中常用过的一种方式。 

我们可以用工厂模式,ioc 容器来保证。这就类似于java 中内存对象的释放由jvm 来复杂,而c++ 由长须一个道理。 

如何实现集群环境下的分布式单例

 

标签:代码,生成器,模式,单例,设计模式,构造函数
From: https://www.cnblogs.com/dousil/p/18044663

相关文章

  • Redis哨兵模式部署
    Redis哨兵模式部署集群架构这里我们搭建一个三节点形成的Sentinel集群,来监管Redis主从集群,架构如下:这里在3台服务器中开启3个redis实例,信息如下:ipport角色172.18.1.106379/27001master172.18.1.116379/27001slave172.18.1.136379/27001slave安装r......
  • 访问者模式
    简介访问者模式(VisitorPattern)是一种行为型设计模式,用于在不改变被访问元素的类的前提下,定义对这些元素的新操作。该模式通过将算法与数据结构分离,使得可以在不修改数据结构的情况下,增加新的操作。结构访问者(Visitor):定义了对于每个元素类所要执行的操作。这些操作可以是不同......
  • 桥接模式(bridge pattern)
    定义:将抽象部分与它的实现部分分离,使他们都可以独立地变化桥接模式使用一种巧妙的方式处理多层继承存在的问题,用抽象关联来取代传统的多层继承,将类之间的静态继承关系转变为动态的组合关系,使得系统更加灵活,并易于扩展,有效的控制了系统中的类的个数(避免了继承层次的指数级爆炸),将两......
  • 中介者模式
    简介中介者模式(MediatorPattern)是一种行为型设计模式,旨在减少对象之间的直接通信,通过引入一个中介对象来促进对象之间的松耦合通信。在这种模式中,对象之间不再直接相互引用,而是通过中介者对象来进行通信。中介者模式通常包含以下几个角色:中介者(Mediator):负责定义接口,用于与各......
  • 实战上,通过一段ID 生成器代码,学习如何发现,代码质量的问题(设计模式)
    ID生成器的需求背景介绍ID中文翻译为标识Identifier,这个概念在生活,工作中随处可见,比如身份证、商业条形码、二维码、车牌号、驾照号。聚焦到软件开发中,ID常用来标识一些业务信息的唯一标识,比如订单的单号或者数据库中的唯一主键,比如地址中ID字段(实际上时没有业务含义的,对用......
  • 迭代器模式
    简介迭代器模式是一种行为型设计模式,它用于提供一种顺序访问聚合对象(如列表、集合、数组等)中的元素,而不需要暴露该对象的内部表示。这种模式将迭代操作从聚合对象中分离出来,使得可以在不同的聚合对象上使用相同的迭代逻辑。在迭代器模式中,通常会有两个主要角色:迭代器(Iterator......
  • 解释器模式
    简介解释器模式(InterpreterPattern)是一种行为设计模式,用于定义一种语言的语法,并提供一个解释器来解释该语言中的表达式。这种模式通常用于处理特定类型的问题,例如解释一种特定的语言或表示法。结构解释器模式通常包含以下角色:抽象表达式(AbstractExpression):定义了一个抽象......
  • 命令模式
    简介命令模式是一种行为设计模式,它允许将请求或操作封装为单独的对象。这些请求可以被参数化,队列化,记录日志,以及支持撤销操作。以下是命令模式的几个关键角色:命令(Command):抽象命令接口,定义了执行命令的方法,通常包含一个execute()方法。具体命令(ConcreteCommand):实现......
  • 职责链模式
    简介职责链模式(ChainofResponsibilityPattern)是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理它为止。这种模式允许多个对象都有机会处理请求,避免了发送者和接收者之间的耦合关系。结构Handler(处理者):定义处理请求的接口,并维护一个后继处理......
  • 观察者模式
    importtimeclassObserver:def__init__(self,name)->None:self.name=namedefupdate(self,message):print("name%sreceivedmessage:%s"%(self.name,message))classSubject:def__init__(self)->No......