• 设计模式——单例模式和原型模式


    1.单例模式

    特点:就是整个程序有且只有一个实例,该类负责创建自己的对象,并且只有一个对象被创建

     懒汉式:必须调用CreateInstance()才能创建实例

        public class Singleton
        {
    
            /// <summary>
            /// 2.指定一个静态字段
            /// </summary>
            private static Singleton singleton = null;
    
    
            private static object Singleton_Lock = new object();
     /// <summary>
            /// 懒汉式学习
            /// </summary>
            /// <returns></returns>
            public static Singleton CreateInstance()
            { 
                if (singleton == null)
                { 
                    lock (Singleton_Lock)//反多线程
                    {
                        if (singleton == null)
                        {
                            singleton = new Singleton();
                        }
                    }
                }
                return singleton;
            }
    }

    问题:如果调用静态方法,可能存在未创建对象的情况

    饿汉式

        public class SingletonThird
        {
    
            /// <summary>
            /// 在类被调用的时候,执行且只执行一一次
            /// </summary>
            static SingletonThird()
            {
                singleton = new SingletonThird();
            }
             
            /// <summary>
            /// 3.饿汉式写法
            /// </summary>
            private static SingletonThird singleton = null;
             
            /// <summary>
            /// 1.私有化构造函数
            /// </summary>
            private SingletonThird()
            {
              
            }
    
        }

    可以动态创建单例模式

    1.泛型单例模型

     public class BaseSingleton<T> where T : new()
        {
            protected static T _Instance;
    
            private static object Singleton_Lock = new object();
            public static T CreateInstance()
            {
                if (_Instance == null)
                {
                    lock (Singleton_Lock)//反多线程
                    {
                        if (_Instance == null)
                        {
                            _Instance = new T();
                        }
                    }
                }    
                return _Instance;
            }
        }

    2.要实现的单列类继承这个模型

       public class SingletonFourth : BaseSingleton<SingletonFourth>
        {
    }

    2.原型模式

    特点:直接内存复制生产新的对象

        public class SingletonFifth
        {
            /// <summary>
            /// 2.饿汉式写法
            /// </summary>
            private static SingletonFifth singleton = new SingletonFifth();
             
            /// <summary>
            /// 1.私有化构造函数
            /// </summary>
            private SingletonFifth()
            {
            }
    
            /// <summary>
            /// 懒汉式学习
            /// </summary>
            /// <returns></returns>
            public static SingletonFifth CreateInstance()
            {  
                return (SingletonFifth)singleton.MemberwiseClone();  //基于内存克隆
            }
    
        }

    先用单例模式生成一个模板对象,然后直接内存克隆,可以优化性能提高速度

  • 相关阅读:
    基于AngularJS的前端云组件最佳实践
    光裁员有什么用,商业变现才是王道
    迄今为止最完整的推送说明书
    个推技术实现原理介绍
    安卓推送——个推服务端api使用误区
    Gerrit代码Review入门实战
    iOS AFNetworking HTTPS 认证
    iOS开发零碎知识点
    Xcode 如何删除过期的Provisioning Profile文件
    一个section刷新 一个cell刷新
  • 原文地址:https://www.cnblogs.com/yyl001/p/16444746.html
Copyright © 2020-2023  润新知