创建模式:Singleton模式

本文深入探讨了单例模式的设计理念,介绍了如何通过限制构造函数访问和静态方法来确保类的唯一实例。文中提供了两种实现方式,包括单线程和多线程环境下的代码示例,并讨论了扩展应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  •  动机

     在软件系统中,经常有这样一些类,必须保证它们在系统中只有一个实例,才能确保它们的逻辑正确性,以及良好的效率。

     如何绕过常规的构造器,提供一种机制来保证一个类中只有一个实例。

     这应该是类设计者的责任,而不是使用者的责任

 

  • 代码展示(C#)

       1,单线程下

       单线程模式下的设计要点:

       1>Singleton 模式中的实例构造器可以设置为Protected以允许子类派生。

       2>Singleton 模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背.

       3>Singleton 模式一般不要支持序列化,因为这可能会导致多个对象实例

       4>Singleton 模式只考虑对象创建的管理,没有考虑对象销毁的管理.就支持垃圾回收的平台和对象的开销来讲,我们一般没有必要对其销毁进行特殊的管理.

       5>不能应对多线程的环境.

 

       2, 多线程

 

变形:

 

 

 

  •  扩展:

 1, 将一个实例扩展到N个实例 ,例如对象池的实现

 2, 将new构造器的调用转移到其他类中,例如多个类协同工作环境中,某个局部环境中只需要拥有某个类的一个实例

 

  •  参考书:

 1, <设计模式: 可利用面向对象软件的基础>

 2, <面向对象分析与设计>

 3, <敏捷软件开发: 原则、模式与实践>

 4,<重构: 改善既有代码的设计>

 5, <Refactoring to Patterns>

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值