C# 设计模式一:【单例】

    xiaoxiao2022-07-07  149

    简介:单例

    一个类有且仅有一个实例

    提供一个唯一实例的全局访问接口

    单例模式确保某一个类只有一个实例,向整个系统提供这个实例。 也就是一个应用程序中只被实例化一次,这样可以很大程度的节省系统的开销。

     

    下面提供几份常见的编程方式,它们的区别在于,什么时候进行实例化。

    程序运行调用实例化

      /// <summary>     /// sealed 不能被继承,防止派生该类     /// </summary>     public sealed class SingleBegin     {         /// <summary>         /// 程序运行调用实例化         /// </summary>         private static SingleBegin g_inst = new SingleBegin();         /// <summary>         /// private 私有,防止被人手动实例化         /// </summary>         private SingleBegin()         {         }         /// <summary>         /// 提供全局唯一单例调用接口         /// </summary>         public static SingleBegin Inst         {             get { return g_inst; }         }          public void Display()         {             Console.WriteLine("程序运行即刻实例化 SingleBegin");         }     }

     

    在静态构造函数中实例化(这只能算半个,因为可以被多次实例化)

    /// <summary> /// sealed 不能被继承,防止派生该类 /// </summary> public sealed class SingleBegin { private static SingleBegin g_inst = null; /// <summary> /// 会被再次实例化,所以这个算半个 /// </summary> static SingleBegin() { /// <summary> /// 使用时调用实例化 /// </summary> g_inst = new SingleBegin(); } /// <summary> /// 提供全局唯一单例调用接口 /// </summary> public static SingleBegin Inst { get { return g_inst; } } public void Display() { Console.WriteLine("程序运行即刻实例化 SingleBegin"); } }

     

    调用单例Inst时实例化(推荐用这种)

    /// <summary> /// sealed 不能被继承,防止派生该类 /// </summary> public sealed class SingleWorld { private static SingleWorld g_inst = null; /// <summary> /// private 私有,防止被人手动实例化 /// </summary> private SingleWorld() { } /// <summary> /// 提供全局唯一单例调用接口 /// </summary> public static SingleWorld Inst { get { if (null == g_inst) { // 调用时实例化 g_inst = new SingleWorld(); } return g_inst; } } public void Display() { Console.WriteLine("普通单例 SingleWorld"); } }

     

    最新回复(0)