单例

作者: 晓龙酱 | 来源:发表于2017-10-01 21:16 被阅读3次

    可以使用范型设计一个单例模板

    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;
            }
        }
    }
    

    现在单例类只能访问到接口中定义的方法。

    相关文章

      网友评论

          本文标题:单例

          本文链接:https://www.haomeiwen.com/subject/ogiaextx.html