单例模式

类图:

常用的实现方式:

第一种线程安全

    public sealed class Singleton{public static readonly Singleton SingletonInstance=new Singleton();private Singleton(){}}

View Code

第二种单线程安全

 //第二种public sealed class SingletonLazy{private static SingletonLazy _singletonInstance;private SingletonLazy(){}//单线程,线程安全public static SingletonLazy SingletonInstance{get{if (_singletonInstance == null){_singletonInstance = new SingletonLazy();}return _singletonInstance;}}}

View Code

第三种线程安全

 public sealed class SingletonLazy{private static SingletonLazy _singletonInstance;private SingletonLazy(){}//多线程,线程安全private static readonly object AsyncObject = new object();public static SingletonLazy SingletonInstanceAsync{get{if (_singletonInstance == null){lock (AsyncObject){if (_singletonInstance == null){_singletonInstance = new SingletonLazy();}}}return _singletonInstance;}}}

View Code

使用场景:

当程序要求只有一个对象存在时,会考虑用单例模式。

在使用前需要了解单例模式与静态对象区别:

功能角度:二者可以相互替换,没什么区别,什么都不考虑的情况用那种方式都行。

性能:单例对象可以延迟创建 ,优先考虑。

扩展:单例对象可以实现多态,扩展性好,静态对象不能。

线程安全:单例对象在多线程时,要考虑线程同步,静态对象不需要。

在不考虑性能和扩展性的时候优先用静态对象。

单例对象的创建方式:

上面三种实现方式比较常见,当然实现方式很多,根据具体的场景去选择,一般默认第一种,简单方便。

转载于:https://www.cnblogs.com/dujq/p/7804442.html

设计模式面对面之单例模式相关推荐

  1. 【原创】设计模式面对面之观察者模式

    观察者模式 观察者模式主要涉及两种对象:观察目标对象,观察对象. 类图: 常用的实现方式: 目标对象 //观察目标public class Target {private readonly strin ...

  2. 设计模式之一:单例模式

    设计模式之一:单例模式 目录介绍 1.单例模式介绍 2.单例模式定义 3.单例模式使用场景 4.单例模式的实现方式 4.1 懒汉式[线程不安全] 4.2 懒汉式[**synchronized 线程安全 ...

  3. golang atomic load 性能_设计模式之Golang单例模式

    今天给大家讲下什么是单例模式,以及在Go语言中如何用正确的姿势实现它.其实单例模式是一种在平时开发中经常用到的软件设计模式.在设计模式结构中,其核心是只包含一个被称为单例的特殊类.通过单例模式可以确保 ...

  4. 单例设计模式 序列化破坏单例模式原理解析及解决方案?

    单例设计模式 序列化破坏单例模式原理解析及解决方案? 序列化和反序列化 反射的破坏

  5. Java设计模式中的单例模式

    有时候在实际项目的开发中,我们会碰到这样一种情况,该类只允许存在一个实例化的对象,不允许存在一个以上的实例化对象,我们将这种情况称为Java设计模式中的单例模式.设计单例模式主要采用了Java的pri ...

  6. c语言 适配器模式例子,NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】...

    NodeJS设计模式总结[单例模式,适配器模式,装饰模式,观察者模式] 发布时间:2020-08-21 03:08:03 来源:脚本之家 阅读:117 作者:lucky芬 本文实例讲述了NodeJS设 ...

  7. Java设计模式探讨之单例模式

    单例模式是在平时的项目开发中比较常见的一种设计模式,使用比较普遍,网上的资料也是一抓一大把,小Alan也来凑凑热闹,为以后充实点设计模式相关的内容做个简单的开篇. 单例模式是一种创建对象的模式,用于产 ...

  8. 设计模式之一:单例模式(Singleton Pattern)

    写这个系列的文章,只为把所学的设计模式再系统的整理一遍.错误和不周到的地方欢迎大家批评.点击这里下载源代码. 什么时候使用单例模式 在程序运行时,某种类型只需要一个实例时,一般采用单例模式.为什么需要 ...

  9. 10.Java设计模式 工厂模式,单例模式

    Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...

  10. 手撕设计模式之「单例模式」(详细解析)

    前言 单例模式主要用来保证系统中某个类的实例对象的唯一性,是最简单的一种设计模式,而且在面试中也经常会被问到,是非常值得我们去学习的.如果你们面试遇到了哪些设计模式的考察,也欢迎留言,我会及时发新的博 ...

最新文章

  1. AI 系统的发展趋势与挑战 | 智源大会-AI系统专题论坛
  2. 微软Print to PDF打印机提示参数错误的解决方法
  3. 云网融合 — 电信网络云
  4. python无法启动该程序因为计算机中丢失_python报错:无法启动此程序,因为计算机中丢失...
  5. 高一计算机组装,高中生计算机组装与维护,呼市新华互联网学校
  6. 两个或者多个图片上下之间有空隙
  7. java编译机制_java的编译机制
  8. django-模型类的修改-外键
  9. 计算机关机电路,实用电脑电源关机全断电电路
  10. Beginning Python chapter 1 Instant Hacking The Basics 2: Comments Strings
  11. HTTPHEAD中referer应用
  12. Remember this!
  13. 电路设计_继电器的电磁干扰
  14. android 调用hal,Android HAL层的使用方法总结
  15. 苹果应用上架被拒各种原因
  16. 看日漫学日语:日漫里常看到的日语100句(建议收藏)
  17. 利用Vant完成登录页面!
  18. 一个操作系统的实现:BOOT
  19. 通过netd获取网卡的IP地址和硬件mac地址
  20. 区分阿里云系统盘和数据盘

热门文章

  1. 安装SVN时提示错误:vcredist 2019 download
  2. LIBAVCODEC_VERSION_INT是哪里定义的?
  3. LINUX下载编译fontconfig
  4. LINUX下载编译OpenH264
  5. C中error的使用
  6. 管理感悟:主管加班,员工才会加班
  7. QQ特性,决定了杀死进程不能收到电话呼叫
  8. c++数组排序_为什么?为什么?Java处理排序后的数组比没有排序的快?想过没有?
  9. scara机器人动荷载_2019年工业机器人国内外企业新品盘点
  10. win2012 定时自动备份mysql_SQL SERVER 2012数据库自动备份的方法