首页 > 其他分享 >01_单例模式

01_单例模式

时间:2024-03-08 10:55:46浏览次数:30  
标签:singleton 01 Counter 模式 static 单例 new null public

单例模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。在单例模式中,类会提供一个静态方法来获取其唯一实例,如果该实例不存在则会创建一个新实例,否则返回已有的实例。

 public sealed class Counter
    {
        public Counter() 
        {
            CreateTime = DateTime.Now;
            Console.WriteLine($"实例化时间:{CreateTime}");
        }

        public DateTime CreateTime { get;private set; }
        private static Counter singleton = null;
        
        /* 只能适用单线程
        
        public static Counter GetSingleton()
        {
            if (singleton == null)
            {
                singleton = new Counter();
            }

            return singleton;
        }*/


        //第2种,适用多线程
        //public static Counter Instance = new Counter();

        private static readonly object locker = new object();
        //第3种, 加锁,能用,性能差
        public static Counter Singleton
        {
            get
            {
                lock (locker)
                {
                    if (singleton == null)
                    {
                        singleton = new Counter();
                    }

                    return singleton;
                }
            }
        }

        //第4种方案 双判断锁,加强性能
        public static Counter Singleton2
        {
            get
            {
                if (singleton == null)
                {
                    lock (locker)
                    {
                        if (singleton == null)
                        {
                            singleton = new Counter();
                        }                        
                    }
                }

                return singleton;

            }
        }

        //第5种 Lazy 懒加载
        public static Counter LazyInstance=> new Lazy<Counter>(() => new Counter()).Value;

    }

 

static void Main(string[] args)
        {
            //Counter counter1 = Counter.Singleton;
            //Counter counter2 = Counter.Singleton;

            
            for (int i = 0;i < 1000; i++)
            {
                Task.Factory.StartNew(() =>
                {
                    Counter counter1 = Counter.LazyInstance;
                    Counter counter2 = Counter.LazyInstance;
                });
            }
           

            Console.ReadKey();
        }

 

标签:singleton,01,Counter,模式,static,单例,new,null,public
From: https://www.cnblogs.com/MingQiu/p/18060501

相关文章

  • 前端设计模式大全
    1.工厂模式工厂模式(FactoryPattern):将对象的创建和使用分离,由工厂类负责创建对象并返回。在前端开发中,可以使用工厂模式来动态创建组件。前端中的工厂模式是一种创建对象的设计模式,它可以让我们封装创建对象的细节,我们使用工厂方法而不是直接调用new关键字来创建对象,使得......
  • MySQL-01.Linux下MySQL安装和使用
    C-01.Linux下MySQL的安装和使用前置说明,MySQL高级部分,需要前置知识,为Linux操作系统。如果没有该部分知识,这里推荐韩顺平老师的Linux操作系统的教程。韩老师Linux教程1.安装前准备1.1Linux系统及工具的准备安装并启动好两台虚拟机:CentOS7版本掌握克隆虚拟机的操作mac地......
  • VUE+Echarts安装与配置01
    1、创建VUEnpminitvue@latest//初始化VUE,执行创建向导任务npminstall//安装相关依赖npmrundev//运行程序,查看创建结果2、创建Echartsnpminstallecharts//安装Echarts插件import*asechartsfromecharts//引用Echarts3、引......
  • 理解Saga模式:分布式事务的优雅解决方案
    理解Saga模式:分布式事务的优雅解决方案在微服务架构中,系统通常被拆分成多个独立的服务,每个服务管理着自己的数据和逻辑。这种拆分带来了灵活性和可扩展性,但同时也引入了分布式事务管理的挑战。传统的事务管理方法,如数据库的ACID(原子性、一致性、隔离性、持久性)事务,不再适用于跨多......
  • P8686 [蓝桥杯 2019 省 A] 修改数组
    备赛蓝桥杯和icpc的习题:一道并查集的题目>#include<iostream>>#include<vector>>#include<algorithm>>#include<math.h>>#include<string>>#include<string.h>>#include<iomanip>>#include<map>&g......
  • 观察者模式
    定义观察者模式(ObserverPattern):定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。观察者模式是一种对象行为型模式。观察者模式包含两个角色:主题(Subject):被观察的对象,它维护了一个观察者列表,可以添加、删除观察者,以及......
  • Java编程--观察者(Observer)设计模式
    观察者设计模式观察者设计模式是一种行为设计模式,允许对象在其状态改变时通知其他依赖对象。它创建了一种发布者(Subject)和订阅者(Observer)之间的依赖关系。这种模式经常用于实现事件处理系统。观察者模式的关键组成部分:Subject(主题):拥有添加和删除观察者的方法,以及通知所有观察......
  • P1525 [NOIP2010 提高组] 关押罪犯
    原题链接题解1:按边权从大到小排序,如果这条边的两个点没确定关系,那么把他们设为敌人这样,就成了一棵棵最大生成树(因为有的罪犯之间没有怨气)由敌人的敌人是朋友可以得出,如果两个点在同一棵树,且距离为偶数,那么代表他们之间互为朋友code1#include<bits/stdc++.h>usingnamespace......
  • 洛谷P4069 [SDOI2016] 游戏
    题目描述我们要操作的是一条在树上的路径\(s\)->\(t\)。(1)查询\(s\)->\(t\)最大的数字。(2)在\(s\)->\(t\)上增加一个数字,输入\(a\),\(b\),对于路径上的一个点\(u\)增加的数字是\(dis(s,u)\timesa+b\)。解题思路直接查询一条从\(s\)到\(t\)的路径是十分不方便的,所以我们......
  • 洛谷题单指南-搜索-P1101 单词方阵
    原题链接:https://www.luogu.com.cn/problem/P1101题意解读:对于方阵中的每一个字符,在8个方向上判断是否和"yizhong"匹配,是一个递归问题。解题思路:用chara[N][N]存储所有字符方阵,用boolb[N][N]标记每个字符是否在任一方向上和yizhong匹配遍历方阵每一字符,如果是'y'则在8个方......