浅析软件项目开发中的单件模式

http://tech.ddvip.com   2008年01月22日    社区交流

内容摘要:单件(Singleton)模式是设计模式的一个典型且相对简单的构造型模式。本文举实例说明单件模式的主要注意事项和多线程环境下的单件模式。

  上面的示例说明通过ICloneable接口的克隆过程导致私有构造函数的失效,CLR通过内存结构的复制生成了一个新的实例,最终导致不同实例的引用操作结果的各自独立。

  上面的单件实现虽然采取了无参数的私有构造函数,但是实际工程中对于第一个且唯一一个实例的构造可能会依赖于具体的参数,不过由于每个客户程序在真正使用时使用的都是既得的实例,因此实际上客户程序不应该把构造参数传递给唯一个实例的构造函数,实际的参数传递过程一般只能通过硬编码在单件类型的静态属性Instance中完成。考虑到代码的维护性问题,笔者建议保留实例的无参数构造函数,而把需要传递的参数通过配置系统传递到唯一实例的构造函数中,例如这里增加了三个配置值:

<configuration>
<configSections>
<section name="sampleSection"
type="System.Configuration.SingleTagSectionHandler" />
</configSections>
<sampleSection setting1="Value1"
setting2="value two"
setting3="third value" />
</configuration>

  示例5

  作为一个集中访问的单独实例,有时候常常需要对于自身数据进行更新,更新的方式可以通过外部显示调用或者单件实例对象自主更新方式两种方式完成。

  如果准备采用外部调用,那么工程上最好通过增加一个接口(例如:名为 IRefershable)为应用中每个Singleton类型统一增加更新的可能。与上一个说明同理,这里刷新过程也最好统一设计为无参数的方法,待刷新所需要的数据源最好来自于一个配置文件或者来自运行环境。

using System;
namespace VisionLogic.DesignPattern.Practice
...{
/**//// <summary>
/// 为Singleton 对象增加可以更新的能力
/// </summary>
interface IRefershable
...{
void Refersh();
}
class Singleton : IRefershable
...{
...
}
}

  示例6

来源:IT168    作者:王翔    责编:豆豆技术应用

正在加载评论...