设计模式之单例模式

单例模式---顾名思义,就是一个类只有一个实例对象,只实例化一次。它有三个要点:(1)一个类只有一个实例(2)类本身自行创建这个实例(3)它必须自行上下向整个系统提供该实例。

代码实现:

 1 public class QQSingle
 2     {
 3         private string name;
 4         private static QQSingle qqsingle;
 5         private static object _lock = new object();
 6         public string Name
 7         {
 8             get
 9             {
10                 return this.name;
11             }
12             set
13             {
14                 this.name = value;
15             }
16         }
17         public static QQSingle getQQ()
18         {
19             if (qqsingle == null)
20             {
21                 lock (_lock)
22                 {
23                     if (qqsingle == null)
24                     {
25                         qqsingle = new QQSingle();
26                     }
27                 }
28             }
29             return qqsingle;
30         }
31     }

   上述代码使用了双重锁方式较好地解决了多线程下的单例模式实现。先看内层的if语句块,使用这个语句块时,先进行加锁操作,保证只有一个线程可以访问该 语句块,进而保证只创建了一个实例。再看外层的if语句块,这使得每个线程欲获取实例时不必每次都得加锁,因为只有实例为空时(即需要创建一个实例),才 需加锁创建,如果已存在一个实例,就直接返回该实例,节省了性能开销。

测试:

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             QQSingle qqsingle = QQSingle.getQQ();
 6             QQSingle qqsingle1 = QQSingle.getQQ();
 7             qqsingle.Name = "nannan";
 8             qqsingle1.Name = "qq";
 9             Console.WriteLine("{0},{1}",qqsingle.Name,qqsingle1.Name);
10             Console.ReadLine();
11         }
12     }

输出结果:qq,qq  这就说明了两个实例对象其实是同一个对象。

posted @ 2013-04-08 16:44  楠楠IT  阅读(211)  评论(0编辑  收藏  举报