另外,作为一个工具,在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,另一套可能要采用多线程技术从头写起。而对于客户来说一般不会意识到执行了不同算法,他(她)们所关心的只是得到同样的结果,他(她)们也只关心这个。
[上一页]
[下一页]
相关文章:
|