开启左侧

[C#] 帮助你更好的理解设计模式之--单例模式

[复制链接]
芜湖小肖 发表于 2018-10-13 18:07:02 | 显示全部楼层 |阅读模式
今天发生了一个错误,才真正参透了单例模式的精髓,以下介绍怎么理解单例设计模式,语法方面请百度;
后来发散的想一想,原来单例模式和面向对象的理解是有非常大关系的。

举例子:
先明白第一点:类的实例化什么意思:“人”类,可实例(new)“男人”,也可实例(new)“女人”;
再明白第二点:我们在使用类时都知道要先new一下,当你new了后,新的实例里面的数据可以看出全部是重新初始化的。

当我在第一个窗体用这个类时肯定是先new一下,然后你会给这个类的实例中的某个数据赋值如:public string A=”小明”;
当我们在另一个窗体用想读取我们之前那个A时,有的人会说我要用到这个类,那我要先new一下再读取A值,那你就错了,此时你一旦new,那么这就是一个新实例了,也就读取不到之前赋给A的小明这个值了!!

此时一个很机智的程序设计模式:单例模式应运而生;它就是把你第一次实例化后就把它定义死了(人类就定死实例化为男人),以后你读写都是读写男人这个实例里面的所有数据!
使用方法:
一、在Vision类中创建单例
  1. #region 创建单例模式
  2. private static Vision _instance = null;
  3. private static readonly object locker = new object();
  4. private Vision() { }
  5. public static Vision Instance()
  6. {
  7.     if (_instance == null)
  8.     {
  9.         lock (locker)
  10.         {
  11.             _instance = new Vision();
  12.         }
  13.     }
  14.     return _instance;
  15. }
  16. #endregion   

  17. public Tools m_Tools = new Tools();
复制代码

二、别的地方使用“实例化”方法:  
  1. Tools m_Tools = Vision.Instance().m_Tools; //单例模式“实例化”方式   
  2. //Tools m_tools = new Tools();              //一般实例化方式
复制代码


最后,每个人的思维方式不太一样,可能有的人看我上面写的感觉很尬,但是能帮助到一个人去理解好单例模式就是最好啦!欢迎指点补充!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表