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

二:结构型设计模式

三:行为型设计模式

/// <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之后 所有线程都等待,  等到完成之后,才开始执行,

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

 

posted on 2017-09-15 17:10  小石头的一天  阅读(185)  评论(0编辑  收藏  举报