zoukankan      html  css  js  c++  java
  • c#设计模式

     一: 创建型设计模式(长视频)

    二:结构型设计模式

    三:行为型设计模式

    /// <summary>
    /// 1 单例模式(单线程和多线程)   减少对象的创建,让对象只创建一次.
    /// 2 单例模式的三种写法
    /// 3 单例模式的优缺点和应用场景

    //Singleton singleton = new Singleton();//对象重用,避免重复构造
     //for (int i = 0; i < 5; i++)
      //{
      //    //Singleton singleton = new Singleton();     //new在外和new在内的差//    Singleton singleton = Singleton.CreateInstance();
      //    singleton.Show();
      //}

     私有构造函数,不允许外部随便new 新实例

    创建一个静态类对象,并做初始化

        private static Singleton _Singleton = null;
            private static object Singleton_Lock = new object();
            public static Singleton CreateInstance()
            {
                //Singleton _Singleton = null;
                if (_Singleton == null)//对象初始化之后,不要再等待锁了
                {
                    lock (Singleton_Lock)//保证lock的方法体同一时刻只有一个线程可以进入
                    {
                        Console.WriteLine("进入锁....");
                        Thread.Sleep(1000);
                        if (_Singleton == null)//是保证第一次初始化之后,不再重复的初始化
                        {
                            _Singleton = new Singleton();
                        }
                    }
                }
                return _Singleton;
            }
    
            public static void DoNothing()
            { }
    
            public void Show()
            {
                Console.WriteLine("这里是{0}.Show", this.GetType().Name);
            }

     调用

     //Singleton singleton = new Singleton();//对象重用,避免重复构造
                    //for (int i = 0; i < 5; i++)
                    //{
                    //    //Singleton singleton = new Singleton();
                    //    Singleton singleton = Singleton.CreateInstance();
                    //    singleton.Show();
                    //}
                    //Show();
                    //OtherClass.Show();

     

    异步线程  创建了九个对象,  解释,同时进入了十个线程. 有9个线程赶到时正好对象对空

    可以加锁的方式解决

    但此种模式有缺陷

    加sleep之后 所有线程都等待,  等到完成之后,才开始执行,

    对象已经创建好了, 所有线程进来都发现不为空

  • 相关阅读:
    SQL中利用脚本恢复数据库
    SQL中如何检查死锁
    三个有用的SQL辅助工具
    企业报销系统完整设计方案(三)
    企业报销系统完整设计方案(二)
    企业报销系统完整设计方案
    Crystal Report在.net中的两种显示方式
    cacti 流量图合并
    Centos 7 配置邮件发送
    Centos 7 Ntop 流量分析 安装
  • 原文地址:https://www.cnblogs.com/zuochanzi/p/7527381.html
Copyright © 2011-2022 走看看