您现在的位置:网络学院 > 开发教室 > 跟我学.net
用设计模式固化你的C#程序(1)

出处:PConline
责任编辑:zwg

[02-5-14 17:35] 作者:荣耀翻译/aspcool.com



  另外,作为一个工具,在singleton模式的实现上,C#优于C++,尽管这个优点很微妙,但绝对重要。基于C++的实现需考虑singleton带来的一些和生命期管理有关的棘手问题,而在C#中则由运行时自动处理。这个优点是有意义的,在singleton模式的C#实现版本中,你只需保证在需要singleton的时候,你拥有一个活的引用即可。

【译注:以下是singleton模式完整示例

C#示例:
using System;
class Singleton
{
private static Singleton singleton = null;
public static Singleton Instance()
{
if (null == singleton)
singleton = new Singleton();
return singleton;
}
private Singleton()
{
}
}
class Application
{
public static void Main()
{
Singleton s1 = Singleton.Instance();
//Singleton s2 = new Singleton(); //错误:构造器不可访问
Singleton s2 = Singleton.Instance();
if (s1.Equals(s2)) // 引用相等
Console.WriteLine("Instances are identical");
}
}

/*以下是程序输出结果:
Instances are identical
*/


  C++示例:【译注:译者在自己的程序实践中,几乎从未将类的声明和实现搅和在一起,此处示例代码之所以是如此写法,只是为了便于大家阅读和比对而已】

#include "stdafx.h";
#include
class Singleton
{
public:
static Singleton* Instance()
{
if (NULL == singleton) singleton = new Singleton();
return singleton;
};
private:
Singleton()
{
};
private:
static Singleton* singleton;
};
Singleton* Singleton::singleton = NULL;
int _tmain(int argc, _TCHAR* argv[])
{
Singleton* sgt1 = Singleton::Instance();
Singleton* sgt2 = Singleton::Instance();
if(sgt1 == sgt2)
cout<<"Instances are identical\n";
delete sgt1;//【译注:这个简单的例子里,是不存在内存泄漏或棘手的生命期管理问题的J】
return 0;
}
/*以下是程序输出结果:
Instances are identical
*/

strategy


  应用常因用户输入、运行平台和部署环境等的不同执行的任务亦不相同。以磁盘文件异步I/O举例,Windows NT/2000下的Win32 API对异步I/O提供了原生支持,但Windows 95/98并非如此。因此,依赖于异步文件I/O的应用就必须实现两套不同的算法,根据部署环境不同,一套可使用Win32 API,另一套可能要采用多线程技术从头写起。而对于客户来说一般不会意识到执行了不同算法,他(她)们所关心的只是得到同样的结果,他(她)们也只关心这个。

[上一页] [下一页]


相关文章:



内容搜索 
高级搜索

本栏今日焦点