单例的实现种类

实现进程单例运行的几种方法         这几天接手同事的一个代码,发现一个应用点击多次会弹出多个,但只有一个是真正在起作用;说到这里,感觉应该看下tasklist,究竟是启动了多个,还是其他的没被顶掉。当时忘了查了,只是仓促的打了补丁,现在贴下代码,做个笔记;       有需要的同学可以直接拿去用: 开发环境:        Qt 5.1.0        高版本或许会出现小问题,没有测试过;在此之前,先谈一下思路; ... 阅读详情

单例模式(singleton)在很多系统中都比较常用。我用得最多的就是用来做缓存。最新重新学习设计模式,想整理一下开发中的一些经验和资料上的讲解以备以后查看。

Singleton模式要点
1.单例类在一个容器中只有一个实例。
2.单例类使用静态方法自己提供向客户端提供实例,自己拥有自己的引用。
3.必须向整个容器提供自己的实例。

单例类的状态
1、无状态单例类可以在多个容器或JVM中存在多个实例而正常运行,因为它是无状态就意味是完全相同的拷贝,如系统内的通用工具方法类等;
2、有状态的单例实例一般是可变的,比如提供表的为一KEY的单例类,一般不在多个容器或JVM中使用,除非建立特殊机制协调各个实例间的状态。

单例模式单例模式是一种常见的设计模式,
单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

一、懒汉式单例在类被加载的时候,唯一实例已经被创建。这个设计模式在Java中容易实现,在别的语言中难以实现。
单例模式-懒汉式单例
public class LazySingleton {    
   /*** 私有静态对象,加载时候不做初始化      */    
   private static LazySingleton m_intance=null;     
    /*** 私有构造方法,避免外部创建实例      */    
    private LazySingleton(){}    
    /*** 静态工厂方法,返回此类的唯一实例.* 当发现实例没有初始化的时候,才初始化. * @return LazySingleton */    
    synchronized public static LazySingleton getInstance(){
        if(m_intance==null){
           m_intance=new LazySingleton();
         }
         return m_intance;
    }
}

//测试一下单例模式
  LazySingleton lazySingleton = LazySingleton.getInstance();  
  LazySingleton lazySingleton1 = LazySingleton.getInstance();
  
  if(lazySingleton==lazySingleton1)){
   System.out.println("同一个对象实例");
  }else{
   System.out.println("不是同一个对象实例");
  }

二、饿汉式单例在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
/***单例模式-饿汉式单例*/
public class EagerSingleton {    
    /**私有的(private)唯一(static final)实例成员,在类加载的时候就创建好了单例对象*/
    private static final EagerSingleton m_instance = new EagerSingleton();
    /*** 私有构造方法,避免外部创建实例      */    
    private EagerSingleton() {}     //提供了一个空的构造方法
    /*** 静态工厂方法,返回此类的唯一实例.* @return EagerSingleton      */    
    public static EagerSingleton getInstance() {
       return m_instance;    
    }
}

//下面来判断一下有没有达到单例效果(系统运行的时候只出来一个空例) 
EagerSingleton eagerSingleton = EagerSingleton.getInstance();  
EagerSingleton eagerSingleton1 = EagerSingleton.getInstance();
  
  if(eagerSingleton==eagerSingleton1)){
   System.out.println("同一个对象实例");
  }else{
   System.out.println("不是同一个对象实例");
  }

三、登记式单例这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。
/*** 单例模式- 登记式单例*/
public class RegSingleton {    
    /*** 登记薄,用来存放所有登记的实例      */    
    private static Map<String, RegSingleton> m_registry = new HashMap();    
    //在类加载的时候添加一个实例到登记薄    
        static {
           RegSingleton x = new RegSingleton();
           m_registry.put(x.getClass().getName(), x);
        }    
        /*** 受保护的默认构造方法*/    
        protected RegSingleton() {}    
        /*** 静态工厂方法,返回指定登记对象的唯一实例;
             * 对于已登记的直接取出返回,对于还未登记的,先登记,然后取出返回
             * @param name
             * @return
                RegSingleton      */    
public static RegSingleton getInstance(String name) {        
      if (name == null) {            
            name = "RegSingleton";         
       }        
       if (m_registry.get(name) == null) {
            try {
                 m_registry.put(name, (RegSingleton) Class.forName(name).newInstance());
            } catch (InstantiationException e) {                
                  e.printStackTrace();            
            } catch (IllegalAccessException e) {                
                   e.printStackTrace();            
           } catch (ClassNotFoundException e) {                
                   e.printStackTrace();           
            }        
        }        
        return m_registry.get(name);    
}    


/** * 一个示意性的商业方法      * @return String      */    
public String about() {        
      return "Hello,I am RegSingleton!";    
}}

 

 

个人认为:单例模式: 就是在static方法上加上了synchronized关键字,而饿汉式没有在static方法上加上synchronized关键字,登记式其实是懒汉式的一种延伸(总结是基于java语言的)

iOS之深入解析单例的实现和销毁的底层原理 一、单例的概念 单例设计模式确保对于一个给定的类只有一个实例存在,这个实例有一个全局唯一的访问点。它通常采用懒加载的方式在第一次用到实例的时候再去创建它。 单例可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源。 单例在整个应用程序中,共享一个资源(这份资源只需要创建初始化一次),应该让这个类创建出来的对象永远只有一个。 单例的设计思路: 永远只分配一块内存来创建对象; 提供一个类方法,返回内部唯一的一个变量; 最好保证ini 阅读详情

相关推荐

QML 单例组件

虽然普通的自定义组件很好用,但是并不利于数据共享以及全局状态的管理(如全局主题样式、全局配置、全局数据缓存等)。这时,单例组件了就派上用场了,通过它我们可以很方便地共享和管理应用级别的信息。

青春不老,奋斗不止! 1836

单例与多例、无状态与有状态

单例:某个类系统范围内只有一个实例 多例:某个类在系统范围内同时有多个实例 无状态类:类中没有状态信息,一般是无成员变量或成员变量的值是不变的。  有状态类:类中有状态信息,一般表现成员变量的值可变,在某一时该被调用而改变状态,之后再调用时获取其正确的状态。 有状态类的实例 ,一般是多例的,用于保存多个相同类型的不同状态值。因为只有一个实例,单线程重复调用情况下可能覆盖实例中之前的成...

java12345678 1699

时序约束实战:从setup/hold到时钟路径约束的深度解析

本文深度解析数字设计中的时序约束实战,重点探讨如何从setup/hold检查的核心原理出发,理解并应用时钟路径约束。文章通过剖析Path Requirement的计算逻辑,结合同频、倍频及异步时钟域等典型场景,提供了从解读时序报告到编写、调试SDC约束的系统方法,帮助工程师有效应对复杂SoC设计中的时序收敛挑战。

weixin_29291185的博客 105

单例模式的6大种类,如何保证线程安全、反射安全以及序列化安全,这次终于通透了

单例模式 在日常的开发过程中,我们需要使用到设计模式,而单例模式可谓是最常见的一种。正确的使用单例模式,不仅可以降低内存的使用率,也可以提升整个程序的运行效率。下面我来谈谈自己对单例模式的理解。 【1】懒汉式 特点: (1)是一种牺牲时间换取空间的策略 (2)懒加载,只在需要的时候才实例化对象 public class Singleton { private static Singlet...

阳阳的博客 2827

Numpy快速入门(np)!看这一篇就够了

Numpy快速入门(np)!看这一篇就够了

weixin_74009895的博客 2680

过程挖掘(Process Mining)1——始于颜值

下周开始每周1-2篇的过程挖掘分享 过程挖掘是什么? 过程挖掘与过程管理的关系? 过程挖掘与数据挖掘的关系? 管理学还是计算机科学?

hyhy12580的博客 6236

随手笔记01:@Autowired和@Resource的区别

随手笔记01:@Autowired和@Resource的区别前言一、共同点二、区别1.仅有单一实现类2.多个实现类总结 前言 在日常实际开发中,我们经常会接触到@Autowired和@Resource两个注解,那他们之间的区别是什么呢?接下来让我们一起探讨@Autowired和@Resource的区别吧。 提示:以下是本篇文章正文内容,下面案例可供参考 一、共同点 都可以用来装配bean, 写在字段或写在setter方法上。在接口仅有单一实现类时,两个注解的修饰效果相同,可以互相替换。 二、区别 1.

weixin_42886543的博客 488

银河麒麟V10 SP3下NFS客户端挂载失败?5个常见问题排查与修复

本文针对银河麒麟V10 SP3系统中NFS客户端挂载失败的常见问题,提供了5个实战排查方案。从基础服务状态检查到防火墙配置、版本兼容性、/etc/fstab设置及权限映射,详细解析了问题根源与解决方案,帮助用户快速恢复NFS文件共享功能。

weixin_42525005的博客 363

单例模式的几种形式

单例模式

qq_41886073的博客 2368

抖音视频数据抓取

最近经常有人问我抓取抖音视频的数据,问我一些很小白的问题,算法给他也不会用。 还是先抓包,获取需要的接口和参数,相关的算法在其它文章里面有描述。 搜索个视频看看 查看抓的包信息: 可以看到,这里是post请求...

2501_91048859的博客 3100

手把手教你用UNI-MOL进行分子性质预测:从3D构象到实战结果

本文提供了使用UNI-MOL进行分子性质预测的完整实战指南。通过详细的环境搭建、3D构象生成、模型加载与微调步骤,手把手教你构建端到端的预测流水线。文章重点解析了如何利用UNI-MOL的3D分子表示学习能力,超越传统2D方法,实现对溶解度、活性等性质的更精准预测,并探讨了结果解读与模型分析方法。

weixin_29164091的博客 117

一种系统化创建单例的方法

最近在做一些重构的事情,为了能够写出更具有「系统性」的代码,狂补 JS 语言相关的知识,今天给大家分享一种创建通用型单例模型的方法。你可能这样写过单例:var Singletion = ...

lefex的博客 149

fastadmin管理员页面实现手机验证码登录功能-腾讯云短信插件

fastadmin管理员页面实现手机验证码登录功能-腾讯云短信插件

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4198

单例理解以及我们为什么要使用单例

单例理解以及我们为什么要使用单例

ThatBoys的博客 2363

30天入门 SAP BTP 开发系列之七:动手在 SAP BTP 上开发第一个 ABAP 程序

本教程从理论转向实践,指导如何在SAP BTP上创建首个ABAP程序。首先通过Booster向导在Trial账号中配置ABAP环境,需确保已启用Cloud Foundry并创建Space。成功创建ABAP实例后,使用ABAP Development Tool连接环境:下载服务密钥文件,导入工具获取连接URL,即可建立项目开始编码。教程提供了从环境搭建到开发工具配置的完整流程,帮助ABAP开发者快速上手BTP云开发。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1685

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ios单例

工作中经常使用到单例,但通常为了方便只是提供了一个类方法shareXXX(xxx类名),在share中使用dispatch_once来实现单例,该种方式在独立开发中使用问题倒不大,如果提供给第三方使用时,就会出现问题了。会造成非单例的情况,通常都是重写allocWithZone方法,在改方法中实现单例,并且实现copy协议的copyWithZone和mutableCopyWithZone方法完善单例的实现,下面为ARC模式下单例示例 @implementation ARCSingleleModel // 使

fengyuyxz的博客 354

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

关于跨dll的模板单例问题

C++的模板可以帮助我们编写适合不同类型的模板类,给代码的复用性提供了极大的方便。近来写了一个涉及单例的C++模板类,简化下来可以归结为以下的代码: 1 2 3 4 5 6 7 8 9 10 11 template typename T> class Singleton {

Commander 2516

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

在Unity,C#中使用不同种类的单例和单例模板,并分析缺点

列举了在c#开发以及unity脚本中使用的单例和单例模板,针对使用环境,分析了存在的问题

XueZhiXia_的博客 2635

聊聊Kotlin单例,从object单例,到带参数单例,论如何优雅的封装!

一. 序单例模式是我们在日常编程中,比较常用的设计模式。一个好的单例,必然需要满足唯一性和线程安全性。而 Java 中,关于单例的文章讲解已经很完善了,单例模式已经成为一种编程范式。在谷...

承香墨影的博客 5333

【线程安全的单例实现方式二:枚举单例】

问题答案概要关键原理1️⃣ 限制实例个数由枚举常量个数决定,JVM 自动创建JVM & Enum 机制2️⃣ 是否线程安全是,类初始化阶段由 JVM 同步保证class init 锁3️⃣ 是否能被反射破坏否,JVM 禁止反射创建 enum 实例4️⃣ 是否能被反序列化破坏否,反序列化根据名字返回现有实例5️⃣ 属于哪种单例介于懒汉与饿汉之间:类加载时创建延迟加载的饿汉式6️⃣ 如何初始化逻辑在枚举构造器中执行即可构造器线程安全执行一次。

2501_93101910的博客 1015

OC单例的实现

一、单例的介绍 单例:在内存中只有唯一的实例,并且提供一个全局的访问方法。 OC中常见的单例有: UIApplication NSFileManager NSUserdefaults NotificationCenter 在IOS开发中,单例的应用非常广,甚至都有滥用的趋势。 二、单例的设计步骤 开发中有一个最常用的单例就是音乐或者

阿了个林 1558

cocos creator单例

转载自:https://www.cnblogs.com/luorende/p/10694714.html 前言 单例,在游戏开发中是比较常用的功能,全局唯一,可以在任何地方直接获取, 省去了方法赋值 或者 属性面板拖动的麻烦。 普通单例_饿汉模式 不管有没调用,一开始就创建单例 1 // Singleton.js 2 var Singleton = cc.Class({...

木木三的专栏 4861

鸿蒙 Next 实现单例

单例模式在鸿蒙 Next 开发中非常实用,尤其是在管理全局状态、配置信息和资源访问时。通过上述几种实现方式,开发者可以根据具体需求选择合适的单例模式。在多线程环境下,确保线程安全是关键,而跨模块共享单例则需要合理组织代码结构。希望本文能帮助你更好地理解和实现单例模式。如果有任何问题或需要进一步讨论,欢迎随时交流!

小淼淼的博客 2314

Spring的单例实现原理

单例模式有饿汉模式、懒汉模式、静态内部类、枚举等方式实现,但由于以上模式的构造方法是私有的,不可继承,Spring为实现单例类可继承,使用的是单例注册表的方式。 什么是单例注册表呢, 1. 使用map实现注册表; 2. 使用protect修饰构造方法; 我们看一个例子: Import java.util.HashMap; Public class RegSingleton{ ...

青鱼入云的博客 8148

spring实现单例及创建线程安全单例

一.spring单例和多例创建 在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例) singleton(单例):只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实例。prototype(多例):对这个bean的每次请求都会创建一个新的bean实例,类似于new。 Spring bean 默认是单例模式。 实战演示: 1,在配置文...

t194978的博客 730
下一篇: 对n个不同正数进行排列,一共有多少种排列方式
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值