C# 单例模式

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading;  
  6.   
  7. namespace 单例模式演示  
  8. {  
  9.     class Program  
  10.     {  
  11.         static void Main(string[] args)  
  12.         {  
  13.             //Singleton obj = new Singleton();  
  14.             //Singleton obj1 = new Singleton();  
  15.   
  16.             //Singleton obj=new Singleton(  
  17.   
  18.             //Singleton obj1 = Singleton.CreateInstance();  
  19.             //Singleton obj2 = Singleton.CreateInstance();  
  20.             //Singleton obj3 = Singleton.CreateInstance();  
  21.             //Singleton obj4 = Singleton.CreateInstance();  
  22.             //Console.Read();  
  23.   
  24.             for (int i = 0; i < 1000; i++)  
  25.             {  
  26.                 Thread t = new Thread(new ThreadStart(() =>  
  27.                 {  
  28.                     Singleton s = Singleton.CreateInstance();  
  29.                 }));  
  30.                 t.Start();  
  31.             }  
  32.             Console.WriteLine("ok");  
  33.             Console.ReadKey();  
  34.   
  35.   
  36.   
  37.   
  38.   
  39.         }  
  40.     }  
  41.   
  42.   
  43.     //当把一个类的构造函数的访问修饰符该为private后,那么这个类在外部就不能被创建对象了(无法在外部调用构造函数,就无法在外部创建对象。)  
  44.     public class Singleton  
  45.     {  
  46.         private Singleton()  
  47.         {  
  48.             Console.WriteLine(".");  
  49.         }  
  50.   
  51.         private static Singleton _instance;  
  52.   
  53.         private static readonly object syn = new object();  
  54.         public static Singleton CreateInstance()  
  55.         {  
  56.             if (_instance == null)  
  57.             {  
  58.                 lock (syn)  
  59.                 {  
  60.                     if (_instance == null)  
  61.                     {  
  62.                         //......  
  63.                         _instance = new Singleton();  
  64.                     }  
  65.                 }  
  66.             }  
  67.   
  68.             return _instance;  
  69.         }  
  70.     }  
  71.   
  72.   
  73.   
  74.     public sealed class Singleton2  
  75.     {  
  76.         private Singleton2()  
  77.         {  
  78.             Console.WriteLine(".");  
  79.         }  
  80.         //静态成员初始化,只在第一次使用的时候初始化一次。   
  81.         private static readonly Singleton2 _instance = new Singleton2();  
  82.   
  83.         public static Singleton2 GetInstance()  
  84.         {  
  85.             return _instance;  
  86.         }  
  87.     }  
  88.   
  89. }  
shashou47

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: