设计模式-单例模式

单例模式:简单地说就是一个 实例即一个对象,全局只用这一个对象。

  如何保证一个对象呐?

    私有的构造函数,保证外界不能直接new 一个对象,那么就保证了单一性;

  但是只是不让外界new,但是第一个对象怎么来呐?

    那就要在单例中创建一个方法,以用来创造这第一个对象,其他地方想要用,直接调用这个方法即可!

  

复制代码
 class Singleton
    {
        //单例模式结构:

        private static Singleton instance;

        // 私有构造方法Singleton(),外界不能使用new关键字来创建此类的实例了。

        private Singleton()
        {

        }
        //方法GetInstance(), 此方法是本类实例的唯一全局访问点。

        public static Singleton GetInstance()
        {
            //如实例不存在,则New一个新实例,否则返回已有实例

            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;

        }
    }
复制代码

==========以上就是 单例模式的基本 结构

 

  如果在多线程的情况下,单例模式会不会被破坏,创造出多个实例。答案是会的,会出现这种情况,那么如何补救?就需要 加锁了

  

复制代码
class Singleton
    {
        //单例模式结构:

        private static Singleton instance;

        // 私有构造方法Singleton(),外界不能使用new关键字来创建此类的实例了。


        private static readonly object _object = new object();//创建锁
        private Singleton()
        {

        }
        //方法GetInstance(), 此方法是本类实例的唯一全局访问点。

        public static Singleton GetInstance()
        {
            //如实例不存在,则New一个新实例,否则返回已有实例           

            if (instance == null)
            {
                //现在还不能直接创建,要加锁,让线程一个个进来
                lock (_object) 
                {
                    //一个个进来如果还是  null 的话,就说明确实没有创建实例了
                    if (instance==null)
                    {
                        instance = new Singleton();
                    }
                }
                
            }
            return instance;

        }
    }
复制代码

  加上锁的话,就更能保证单例模式的运行了

 

============题外话:什么时候使用  锁?=>  当多个线程调用同一个方法时,会需要锁 阻塞一下线程

posted on   泰坦尼克号上的活龙虾  阅读(18)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示