预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C#面向对象设计模式纵横谈 2.Singleton单件(创建型模式) 李建忠 www.lijianzhong.com 上海祝成科技高级培训讲师 模式分类 从目的来看: –创建型(Creational)模式:负责对象创建。 –结构型(Structural)模式:处理类与对象间的组合。 –行为型(Behavioral)模式:类与对象交互中的职责分配。 从范围来看: –类模式处理类与子类的静态关系。 –对象模式处理对象间的动态关系。 动机(Motivation) 在软件系统中,经常有这样一些特殊的类,必须保证它们 在系统中只存在一个实例,才能确保它们的逻辑正确性、 以及良好的效率。 如何绕过常规的构造器,提供一种机制来保证一个类只有 一个实例? 这应该是类设计者的责任,而不是使用者的责任。 意图(Intent) 保证一个类仅有一个实例,并提供一个该实例的全 局访问点。 ——《设计模式》GoF 结构(Structure) 单线程Singleton模式实现 CodesinVS.NET 单线程Singleton模式的几个要点 •Singleton模式中的实例构造器可以设置为protected以允 许子类派生。 •Singleton模式一般不要支持ICloneable接口,因为这可能 会导致多个对象实例,与Singleton模式的初衷违背。 •Singleton模式一般不要支持序列化,因为这也有可能导致 多个对象实例,同样与Singleton模式的初衷违背。 •Singletom模式只考虑到了对象创建的管理,没有考虑对 象销毁的管理。就支持垃圾回收的平台和对象的开销来 讲,我们一般没有必要对其销毁进行特殊的管理。 •不能应对多线程环境:在多线程环境下,使用Singleton模 式仍然有可能得到Singleton类的多个实例对象。 多线程Singleton模式实现 CodesinVS.NET 使用.NET类型初始化机制 实现多线程Singleton模式 CodesinVS.NET Singleton模式扩展 •将一个实例扩展到n个实例,例如对象池的实现。 •将new构造器的调用转移到其他类中,例如多个 类协同工作环境中,某个局部环境只需要拥有某 个类的一个实例。 •理解和扩展Singleton模式的核心是“如何控制用户 使用new对一个类的实例构造器的任意调用”。 .NET框架中的Singleton应用 CodesinVS.NET 推荐参考书 •《设计模式:可复用面向对象软件的基础》GoF •《面向对象分析与设计》GradyBooch •《敏捷软件开发:原则、模式与实践》RobertC.Martin •《重构:改善既有代码的设计》MartinFowler •《RefactoringtoPatterns》JoshuaKerievsky Question&Answer 如需提出问题,请单击“提问”按钮并在 随后显示的浮动面板中输入问题内容。一 旦完成问题输入后,请单击“提问”按钮。