今天发生了一个错误,才真正参透了单例模式的精髓,以下介绍怎么理解单例设计模式,语法方面请百度;
后来发散的想一想,原来单例模式和面向对象的理解是有非常大关系的。
举例子:
先明白第一点:类的实例化什么意思:“人”类,可实例(new)“男人”,也可实例(new)“女人”;
再明白第二点:我们在使用类时都知道要先new一下,当你new了后,新的实例里面的数据可以看出全部是重新初始化的。
当我在第一个窗体用这个类时肯定是先new一下,然后你会给这个类的实例中的某个数据赋值如:public string A=”小明”;
当我们在另一个窗体用想读取我们之前那个A时,有的人会说我要用到这个类,那我要先new一下再读取A值,那你就错了,此时你一旦new,那么这就是一个新实例了,也就读取不到之前赋给A的小明这个值了!!
此时一个很机智的程序设计模式:单例模式应运而生;它就是把你第一次实例化后就把它定义死了(人类就定死实例化为男人),以后你读写都是读写男人这个实例里面的所有数据!
使用方法:
一、在Vision类中创建单例
- #region 创建单例模式
- private static Vision _instance = null;
- private static readonly object locker = new object();
- private Vision() { }
- public static Vision Instance()
- {
- if (_instance == null)
- {
- lock (locker)
- {
- _instance = new Vision();
- }
- }
- return _instance;
- }
- #endregion
- public Tools m_Tools = new Tools();
复制代码
二、别的地方使用“实例化”方法:
- Tools m_Tools = Vision.Instance().m_Tools; //单例模式“实例化”方式
- //Tools m_tools = new Tools(); //一般实例化方式
复制代码
最后,每个人的思维方式不太一样,可能有的人看我上面写的感觉很尬,但是能帮助到一个人去理解好单例模式就是最好啦!欢迎指点补充!
|