动机(Motivation) 在软件系统中,经常有这样一些类,必须保证它们在系统中只存在一个类的实例,才能确保它们逻辑的正确性,以及良好的效率
动机(Motivation)
在软件系统中,经常有这样一些类,必须保证它们在系统中只存在一个类的实例,才能确保它们逻辑的正确性,以及良好的效率
如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例。
这应该是类设计者的责任,不是类使用者的责任
意图(Intent)
保证一个类仅有一个实例,并提供一个实例的全局访问点。
通用实现:
1.静态初始化
Code
using System;
namespace SafeSingletonDemo
{
public sealed class StaticInitialization
{
private static readonly StaticInitialization instance = new StaticInitialization();
private StaticInitialization()
{
}
public static StaticInitialization Instance
{
get
{
return instance;
}
}
}
}
2.延迟初始化Singleton
Code
using System;
namespace SafeSingletonDemo
{
public sealed class DelayInitialization
{
DelayInitialization()
{
}
public static DelayInitialization Instance
{
get
{
return Nested.instance;
}
}
class Nested
{
static Nested()
{
}
internal static readonly DelayInitialization instance = new DelayInitialization();
}
}
}
注意:
Singleton模式的实例构造器可以设置成protected允许子类派生
Singleton模式一般不要支持ICloneable接口
Singleton模式一般不要支持序列化,因为这样可能产生多个实例
Singleton模式只考虑到对象创建的管理,没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来看,我们一般没有必要对其销毁进行特殊的处理。