zoukankan      html  css  js  c++  java
  • 设计模式之单例模式

    单例模式---顾名思义,就是一个类只有一个实例对象,只实例化一次。它有三个要点:(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  这就说明了两个实例对象其实是同一个对象。

  • 相关阅读:
    luogu P1064|| 01背包||金明的预算
    NOIp蒟蒻的爆零记——HA-0132
    模板输入计划
    1112测试教你做人
    NOIP注意事项
    强连通分量的一二三 | | JZOJ【P1232】 | | 我也不知道我写的什么
    图的割点 | | jzoj【P1230】 | | gdoi | |备用交换机
    【游戏作品】Sunset Game 制作组出品游戏一览
    【说明】我们计划从博客园迁移到知乎啦
    【总结】操作系统的重点
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3008318.html
Copyright © 2011-2022 走看看