c# 多线程单例模式_设计模式之单例模式

为了巩固跟复习22个设计模式,每天不定时发表一篇关于设计模式的文稿!今天写的是结构型模式中的“单例模式(单体模式)”。

创建型模式:单例模式(单件模式)->


  • 定义

单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。


  • 单例模式结构
f66e7f3361bcc939500d0a6751cae440.png

单体模式结构

  1. 单例 (Singleton) 类声明了一个名为 get­Instance获取实例的静态方法来返回其所属类的一个相同实例。单例的构造函数必须对客户端 (Client) 代码隐藏。 调用 获取实例方法必须是获取单例对象的唯一方式。

  • 适应场景
  1. 如果程序中的某个类对于所有客户端只有一个可用的实例, 可以使用单例模式。
  2. 如果你需要更加严格地控制全局变量, 可以使用单例模式。

  • 实现方式
  1. 在类中添加一个私有静态成员变量用于保存单例实例。
  2. 声明一个公有静态构建方法用于获取单例实例。
  3. 在静态方法中实现"延迟初始化"。 该方法会在首次被调用时创建一个新对象, 并将其存储在静态成员变量中。 此后该方法每次被调用时都返回该实例。
  4. 将类的构造函数设为私有。 类的静态方法仍能调用构造函数, 但是其他对象不能调用。
  5. 检查客户端代码, 将对单例的构造函数的调用替换为对其静态构建方法的调用。

  • 单例模式的优缺点

优点:1)你可以保证一个类只有一个实例。

2)你获得了一个指向该实例的全局访问节点。
3)仅在首次请求单例对象时对其进行初始化。

缺点:1)违反了单一职责原则。改模式同时解决了两个问题。

2)单例模式可能掩盖不良设计,比如程序各组件之间相互了解过多等。

3)该模式在多线程环境下需要进行特殊处理,避免多线程多次创建单例对象。

4)单例的客户端代码单元测试可能比较困难,因为许多测试框架以基于继承的方式创建模拟对象,而且绝大部分原因无法重新静态方法,所以你需要相处仔细考虑模拟单例的方法。要么干脆不编写测试代码,或者不使用单例模式。


  • 在Java中单例模式的应用
* java.lang.Runtime#getRuntime()* java.awt.Desktop#getDesktop()* java.lang.System#getSecurityManager()

  • 如何识别一个单例模式

单例可以通过返回相同的换从对象的静态构建方法来识别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值