可以使用范型设计一个单例模板
public class Singleton<T> where T : Singleton<T>, new()
{
static private T m_instance;
static private readonly object m_lockObject = new object();
protected Singleton()
{
Debug.Assert(m_instance == null, string.Format("{0} instance is Duplicated!", typeof(T).Name));
}
static public T Instance{
get{
if(m_instance != null)
return m_instance;
lock(m_lockObject)
{
if(m_instance != null)
return m_instance;
m_instance = new T();
}
return m_instance;
}
}
}
此时使用Instance变量会访问到Singleton子类的所有public方法,如果我们只想对外公布指定的方法呢?使用接口
public class Singleton<T, I> where T : Singleton<T, I>, I, new()
{
static private I m_instance;
static private readonly object m_lockObject = new object();
protected Singleton()
{
Debug.Assert(m_instance == null, string.Format("{0} instance is Duplicated!", typeof(T).Name));
}
static public I Instance{
get{
if(m_instance != null)
return m_instance;
lock(m_lockObject)
{
if(m_instance != null)
return m_instance;
m_instance = new T();
}
return m_instance;
}
}
}
现在单例类只能访问到接口中定义的方法。
网友评论