• 重头开始学23种设计模式:单例模式


    最近感觉做程序又开始浑浑噩噩,对设计模式和算法基本了解,但基本不会用。所以打算最近1个月把设计模式和算法重新,温故而知新下。

    首先从程序开发经常涉及到的23种设计模式开始,希望这次能更加熟练的运用设计模式来加强自己的开发能力。

    首先从单例模式开始:

    单例模式在我的理解是对程序对象的缓存,防止不断new,保持对象唯一性,提高程序性能。

    namespace SinglePattern {
        class Program {
            static void Main(string[] args) {
                for (int i = 0; i < 100; i++)
                {
                    Task.Run(() =>
                    {
                        Singleton objSingleton = Singleton.GetInstance;
                    });
                }
                Console.Read();
            }
        }
    
        public class Singleton
        {
            private static  Singleton _instance = null;
            private static readonly  object _obj = new object();
            private static bool _initialize = false;
    
            private Singleton()
            {
                
            }
    
            public static Singleton GetInstance
            {
                get
                {
                    ////第一种写法
                    if (_instance == null) {
                        lock (_obj) {
                            if (_instance == null) {
    
                                _instance = new Singleton();
                                Console.WriteLine("Create a singleton instance!");
                            }
                        }
                    }
                
                    //第二种写法
                    //if (!_initialize)
                    //{
                    //    lock (_obj)
                    //    {
                    //        if (!_initialize)
                    //        {
                    //            _instance=new Singleton();
                    //            _initialize = true;
                    //            Console.WriteLine("Create a singleton instance!");
                    //        }
                    //    }
                    //}
                    return _instance;
                }
            }
        }
    }

    上面就是单例常用写法。但实际项目开发当中,我们不能对每一个类都要写成单例,所以解决这种情况,我就需要一个容器来保持单例。

    把需要单例的对象保存进去。

    下面是代码:

        public class Singleton
        {
            private static readonly IDictionary<Type, object> allSingletons;
    
            static Singleton()
            {
                allSingletons=new Dictionary<Type, object>();
            }
    
            public static IDictionary<Type, object> AllSingletons
            {
                get
                {
                    return allSingletons;
                }
            }
        }
    
        public class Singleton<T> : Singleton
        {
            private static T _instance;
    
            public static T Instance
            {
                get
                {
                    return _instance;
                }
                set
                {
                    _instance = value;
                    AllSingletons[typeof (T)] = value;
                }
            }
        }
  • 相关阅读:
    关于软件工程是不是教那些不会写程序的人开发软件的一些看法。
    学习这门课的一些问题
    软件测试的平台
    课程上不明白的问题
    目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
    自我介绍
    【软件工程】提问回顾与个人总结
    Google Kick Start 2019 C轮 第一题 Wiggle Walk 题解
    elasticsearch-py 解决 too_long_frame_exception 问题
    Redis集群学习笔记
  • 原文地址:https://www.cnblogs.com/flyfish2012/p/3811505.html
Copyright © 2020-2023  润新知