学习单例(singleton)模式的收获

创建型模式:单例(Singleton)模式 单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。 阅读详情
单例模式的特点:
  • 单例类只能有一个实例。
  • 单例类必须自己创建自己的唯一实例。
  • 单例类必须给所有其他对象提供这一实例。

实现单例模式总结有4种方法

 

 

1)传说中的饿汉式

饿汉也就是很饥渴,很想快速占有一切,所以饿汉单例就是在类初始化的时候就将单例对象创建了。

 

2)双重检查加锁

这种方式我以前自己在优化代码的时候用过,但不知道这就是传说中的双重检查加锁,JDK1.5之后可以用,但效率也不是很高。主要是不对单例方法加锁,而是在方法内部加锁,并且锁内部再加一层判断。

  1.         if(instance == null){ 
  2.             //同步块,线程安全的创建实例 
  3.             synchronized (Singleton.class) { 
  4. //再次检查实例是否存在,如果不存在才真正的创建实例 
  5.                 if(instance == null){ 
  6.                     instance = new Singleton(); 
  7.                 } 
  8.             } 
  9.         }

 

3)Lazy initialization holder class模式

 

主要利用类级内部类来实现延迟加载,然后由JVM保证线程安全

  1. public class Singleton { 
  2.      
  3.     private Singleton(){} 
  4.     /**
  5.      *    类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
  6.      *    没有绑定关系,而且只有被调用到时才会装载,从而实现了延迟加载。
  7.      */ 
  8.     private static class SingletonHolder{ 
  9.         /**
  10.          * 静态初始化器,由JVM来保证线程安全
  11.          */ 
  12.         private static Singleton instance = new Singleton(); 
  13.     } 
  14.      
  15.     public static Singleton getInstance(){ 
  16.         return SingletonHolder.instance; 
  17.     } 
  18. } 

4)利用枚举实现

这个不想多说,自己可以上百度查查,说多了大家接受不了

 

 

 

详细可以参考:http://blog.youkuaiyun.com/m13666368773/article/details/7679343

Swift设计模式之单例(SINGLETON) Swift是一门新的语言,每一门语言都有其特点,如何在Swift下实现单例设计模式呢? 阅读详情

相关推荐

【优秀三方库研读】【C++基础知识】odygrd/quill -- 从 ThreadContextManager 深度解析 Meyer’s Singleton(梅耶单例)模式

Meyer's Singleton 是 C++ 中最优雅、最安全的单例实现方式之一,由 C++ 大师 Scott Meyers 在《Effective C++》中提出。下面从原理到实现进行全面剖析

沐怡旸的专栏 1444

Java 设计模式 Singleton 单例 模式

Java 设计模式 Singleton 单例 模式 Singleton模式用于只生产一个实例。 涉及到的角色 Singleton:负责生产一个实例,角色中有一个总是返回唯一实例的static方法。 /** * 单例 * @author 托马斯小火车喷雾又喷烟 * */ public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { Sy.

5万+

boost::serialization::singleton单例的使用方式

#include "stdafx.h" #include #include #include // 使用方式1:模板参数方式 class CTest:public boost::noncopyable // 不能复制、赋值 { public: void Set(int i){ m_val = i; } void Print() const{ std::cout<<m_val<<std:

永无止境 6284

Singleton(单例) 模式

5.1 Singleton 模式   程序在运行时,通常会生成很多实例。但是,当我们想在程序中表示某个东西只会存在一个时,就会有 “只创建一个实例” 的需求。   当然,只要我们在编写程序时多加注意,确保只调用了一次 new MyClass(),就可以达到值生成一个实例的目的。当如果要达到以下目的: 确保任何情况下都绝对只有1个实例 想在程序上表现出“只存在一个实例”   像这样的确保只生成一...

矢落叶の博客 360

C++_单例Singleton模式

catalog类内static 类内static class ST{ static int a = 123; static void func(){ xxx }; }; 这是会报错的!!! 类内的static,不可以初始化!!! 即,你只能写成: class ST{ static int a; static void func(); }; 其实你写成这样,甚至可以看做是: class ST{ }; 意思是说, 并不单单是不能初始化这么简单,而是 static在类里时 其实这个类里 是没

WChang的博客 508

MobaXterm隧道配置详解:为PyCharm远程开发打通‘最后一公里’

本文详细解析了如何利用MobaXterm配置SSH隧道,实现PyCharm远程开发的高效连接。通过本地端口转发技术,开发者可以安全访问内网服务器,特别适用于需要通过跳板机的复杂网络环境。文章涵盖从基础配置到企业级运维的全套解决方案,包括性能优化、安全加固等实用技巧。

weixin_30566063的博客 504

当Android遇上设计模式之单例(Singleton)模式

文章目录1. 单例模式定义2. 单例模式实现2.1 饿汉模式2.2 懒汉模式2.3 双重检查模式(DCL)2.4 静态内部类单例模式2.5 枚举单例3. 单例模式的使用场景 设计模式六大原则: 单一职责原则:就一个类仅有一个引起它变化的原因,即类承担的职责单一性; 开放封闭原则:类、模块、函数等应该是可以扩展的,但是不可修改。换句话说,就是面对需求的改变要尽可能地保证相对稳定,尽量通过扩...

老蒋也疯狂 2984

基于SpringBoot+Vue的公司考勤管理系统

为什么选择我博主是优快云毕设辅导博客第一人兼开派祖师爷、博主本身从事开发软件开发、有丰富的编程能力和水平。专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流和合作。

m0_71849512的博客 1162

Singleton(单例)模式

文章目录Singleton(单例)模式1. 意图2. 别名3. 动机4. 适用性5. 结构6. 参与者7. 协作8. 效果9. 实现10.代码示例11. 已知应用12. 相关模式13. 设计原则口袋14. 参考文献 Singleton(单例)模式 隶属类别——对象创建型模式 1. 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2. 别名 NO 3. 动机 对一些类来说,只有一个实...

qq_38636211的博客 446

基于睿抗智能小车省赛第一题兵人识别的学习5.25

先用pip uninstall numpy卸载,再在后面输入pip install numpy==1.23安装版本为1.23的numpy。首先安装Anaconda环境;pycharm方便使用,安装yolov5以及一大堆数据包;由于python中的numpy插件包版本过高,训练失败,所以要安装一个版本低的包。每次运行都要先运行虚拟环境,输入:conda activate。图中所有精度大概在0.768-0.99之间。这里指定安装numpy1.23.。训练完成会得到一个衡量精度的指标。等待99张图片训练完成。

Haili_的博客 1300

别再乱装了!Win10下NVIDIA显卡驱动、CUDA 11.0和cuDNN 8.0.5保姆级配置指南(含版本匹配避坑)

本文提供Win10下NVIDIA显卡驱动、CUDA 11.0和cuDNN 8.0.5的保姆级配置指南,详细解析版本匹配逻辑与安装步骤。从驱动选择到环境变量配置,再到框架测试,手把手教你避开常见坑点,确保深度学习环境一次配置成功。特别强调版本匹配的重要性,帮助开发者高效搭建GPU开发环境。

weixin_30600197的博客 307

四。Singleton模式与MonoState模式 -- 强制单例

一。 Singleton模式单态定义:Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。还有, singleton能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这

JJ0320的专栏 506

交换机四种光互联技术:OIO、OBO、NPO与CPO

在过去几十年里,数据中心交换机主要依赖电信号通过铜线进行数据传输。然而,随着数据传输速率从100Gbps向400Gbps、800Gbps甚至1.6Tbps迈进,传统电互联(Electrical Input & Output, EIO)面临三大瓶颈:信号衰减、功耗激增和空间限制。例如,高速信号在长距离铜线传输中会产生严重的信号失真,迫使设计者加入数字信号处理器(DSP)来补偿信号衰减,这进一步推高了功耗和成本。此外,传统可插拔光模块的体积较大,限制了端口密度,难以满足现代数据中心对高带宽密度的需求。

网络技术联盟站 3146

【设计模式】单例(Singleton)

1、什么是单例呢?顾名思义单例就是单个实例,单个对象的意思。 2、单例设计模式的功能:可以保证一个类只生成一个类的实例,也就是说在整个程序空间里只存在一个该类的实例。 一、案例引申 1、栗子 如上图:首先我们创建了一个Person类,紧接着我们写个测试类 调用他 打印其对象的内存地址。 2、思考-------设计单例 观察结果发现三个内存地址都不同,此时你会发现我们每次都 “new”...

dev晴天的博客 1202

《Android系统开发中高级定制专栏导读》

欢迎来到【Android 中高级系统定制】专栏!在这里,将深入探讨Android系统开发与定制的方方面面,涵盖从权限管理、驱动开发到系统应用配置等多个领域。

我其实什么都不会 1581

【5】GD32H7xx CAN发送及FIFO接收

GD32H7xx CAN收发调试记录,包含源码

madao1234的博客 1818

设计模式学习笔记--单例(Singleton)和多例(Multiton)

单例(Singleton)模式一个最重要的特点是类的构造方法是私有的,从而避免了外部利用构造方法直接创建多个实例,同时它是自实例化的;多例模式(Multiton Pattern),实际上就是单例模式的自然推广。

Java之旅 2709

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

简述设计模式-单例(Singleton)模式

概述: 如果要保证系统里一个类最多只能存在一个实例时,我们就需要单例模式。这种情 况在我们应用中经常碰到,例如缓存池,数据库连接池,线程池,一些应用服务实 例等。在多线程环境中,为了保证实例的唯一性其实并不简单,这章将和读者一起 探讨如何实现单例模式 最简单的单例 public class Singleton { private static Singleton instance = new Singleton(); //other fields... private Singleton() { } pu

qq_29499107的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

02 Singleton单例

Singleton单例常用于manager等只需要有一个实例的地方,但是由于正常情况我们无法阻止其他人创建实例,所以我们需要用Singleton单例模式来约束。 Singleton单例模式有8种写法,但是只有两种完美无缺,但是完美的不常用。

H.C. Lee的博客 558

c++ 设计模式之单例详解

单例设计模式详述。

zxy_ZXY123的博客 1623

moduo之单例模板Singleton

moduo提供了单例模板类,是线程安全的。

多看多听多总结 823

单例--Meyers' Singleton

C++单例–Meyers’ Singleton 简单写法 C++11以前需要双重检查,但是双重检查也是不安全的所以需要加锁;C++11以后,规定了local static在多线程条件下的初始化行为,要求编译器保证了内部静态变量的线程安全性.也就是说local static变量会在编译期初始化,我们可以利用这一特性完成单例. #include <iostream> #include &l...

weixin_44048823的博客 8675

Object-C 中实现 Singleton (单例) 模式

撰写本文参考于网上的一些帖子,资料,文档。 关于 面向对象的设计模式 对于面向对象的设计模式,想必大家并不陌生吧。 纵观23种设计模式中,数单例模式(Singleton)和工厂模式(Factory Method)最为熟悉和基础吧。当然,本文总结Singleton模式,对于其他设计模式不做叙说。 Singleton模式,即单例模式。顾名思义,主要用于做应用程序的资源共享控制。用途

Mars2639——求知de路上 1万+

单例(Singleton)模式

文章目录单例模式的定义和特点单例模式的结构饿汉式单例懒汉式单例静态内部类单例枚举类单例 单例模式的定义和特点 定义:一个类只有一个实例,且该类能够自行创建这个实例的一种模式。 特点: 单例类只有一个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单例的全局访问点 单例模式的结构 单例模式的主要角色包含以下两个部分: 单例类:包含一个实例且能够自行创建这个实例的类 访问类:使用单例的类 饿汉式单例 特点:类一旦加载就创建一个单例,保证在调用getInstance()方法之前单例就已

Lucius 216
上一篇: 简单工厂,工厂, 抽象工厂模式的学习与比较
下一篇: Builder设计模式学习笔记
Ice008
博客等级 码龄19年 34粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值