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  这就说明了两个实例对象其实是同一个对象。

  • 相关阅读:
    Cookies
    一个完整的upstart脚本分析
    squid总结
    python递归读取目录列表
    python删除文件
    ubuntu切割mp3文件
    TP-LINK TL-WN725N V2 / rtl8188eu Linux驱动安装
    ubuntu启动脚本
    su对环境变量做了什么
    sudoers文件配置
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3008318.html
Copyright © 2011-2022 走看看