• 架构师_设计模式_结构型_单例模式


    1:实现单例模式的

      1:构造函数私有化,提供公共静态方法给外面访问,定义一个静态变量保存实例 加上双重判断和锁   这个也叫懒汉单例模式  在单例类里面定义方法,方法是先执行

      2:静态构造函数,由CLR控制,且只调用一次,也叫饿汉单例模式, 定义的静态方法必须先构造这个实例再执行

    2:为什么使用单例

      对象的重用,性能快速 ,十几万个对象 重复实例 性能损失大

      例子 数据库连接池 一般有十个线程,用完就还回去,如果不用单例,那么十个用完了,别人就需要等待了,

      单例模式解决不了多线程安全问题, 当十万个对象同时访问单例,会出现线程冲突 能丢失几十个左右的线程

    优先使用饿汉单例模式,线程安全;

    using System;
    
    namespace 单例模式
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
            }
        }
    
        //饿汉单例模式
        public class HungryManSingeletionMode
        {
            //第一步 构造函数私有化
            //第一步私有化构造函数
            private HungryManSingeletionMode()
            {
                Console.WriteLine("饿汉构造函数");
            }
            //第二步 定义私有静态类 初始化为null
            private static HungryManSingeletionMode _hungryManSingeletionMode=null;
    
            //第三步 创建静态构造函数:由CLR保证,在第一次使用到这个类型之前,自动被调用且只调用一次
            //很多初始化都可以在这里完成
            static HungryManSingeletionMode()
            {
                _hungryManSingeletionMode = new HungryManSingeletionMode();
            }
            //第四步提供公共方法访问
            public static HungryManSingeletionMode createSingeletion()
            {
                return _hungryManSingeletionMode;
            }
    
        }
        //懒汉单例模式
        public class LazyManSingeletionMode
        {
            //第一步私有化构造函数
            private LazyManSingeletionMode() 
            {
                Console.WriteLine("懒汉构造函数");
            }
            //第二步 定义私有静态变量
            private static LazyManSingeletionMode _LazyManSingeletionMode = null;
    
            //第三步提供公共方法访问
    
            public static void getSingeLetionMode()
            {
                //第六步加双重判断 防止多线程
                if(_LazyManSingeletionMode == null){ 
                //第五步加锁防止多线程
                lock (ModeLock)
                {
                    //第四步 外卖要实例化的时候 保证方法只实例化类一次
                    if (_LazyManSingeletionMode == null)
                    {
                        _LazyManSingeletionMode = new LazyManSingeletionMode();
                    }
                }
                }
            }
            //第五步 定义静态只读变量加锁 防止多个人同时进来,
            private static readonly object  ModeLock=new object();
        }
    }
  • 相关阅读:
    冷饭新炒:理解Sonwflake算法的实现原理
    nodejs多线程的探索和实践
    git 更新某个目录或文件
    Redis中删除过期Key的三种策略
    MySql(Innodb)事务隔离级别
    Maven的依赖范围
    Maven入门和介绍
    IDEA(Web项目忽略配置文件后)导入项目,拉取项目后的配置
    IDEA(普通项目忽略配置文件后)导入项目,拉取项目后的配置
    Maven的pom文件中标签含义
  • 原文地址:https://www.cnblogs.com/LZXX/p/12909503.html
Copyright © 2020-2023  润新知