- 动机
在软件系统中,经常有这样一些类,必须保证它们在系统中只有一个实例,才能确保它们的逻辑正确性,以及良好的效率。
如何绕过常规的构造器,提供一种机制来保证一个类中只有一个实例。
这应该是类设计者的责任,而不是使用者的责任
- 代码展示(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>