当前位置: 首页 > article >正文

C#演示单例模式

单例模式的特点:
确保一个类只有一个实例,并提供一个全局访问点。

 //单例模式的实现
    internal class Boss
    {
        //定义静态变量保存实例
        private static Boss uniqueBoss;

        //定义锁,确保线程访问安全
        private static readonly object _lock = new object();

        //定义私有构造函数,使外界不能创建该类实例
        private Boss()
        {

        }

        //定义公有方法提供一个全局访问点,
        public static Boss GetBoss()
        {
            //关键代码加锁
            lock (_lock)
            {
                //如果类的实例不存在则创建,否则直接返回
                if (uniqueBoss == null)
                {
                    uniqueBoss = new Boss();
                }
            }

            return uniqueBoss;
        }


    }


    //双判断模式的写法:
     internal class Person
    {
        private Person() { }

        private static Person _instance;

        private static readonly object _instanceLock = new object();

        public static Person Instance()
        {
            if (_instance == null)
            {
                lock (_instanceLock)
                {
                    if (_instance == null)
                    {
                        _instance = new Person();
                    }
                }
            }

            return _instance;
        }
    }

实际使用:

 partial class Singleton_ViewModel : ObservableObject
    {

        //创建很多个Boss变量
        Boss boss_1 = Boss.GetBoss();
        Boss boss_2 = Boss.GetBoss();
        Boss boss_3 = Boss.GetBoss();

        [ObservableProperty]
        private string name;

        [ObservableProperty]
        private int age;

        [ObservableProperty]
        private string sex;

        [RelayCommand]
        private void Li()
        {
            Name = boss_1.Name = "李总";
            Age = boss_1.Age = 38;
            Sex = boss_1.Sex = "男";

            Boss1 = boss_1 == boss_2 ? "boss_1 = boss_2" : "boss_1 != boss_2";
        }

        [RelayCommand]
        private void Xie()
        {
            Name = boss_2.Name = "谢总";
            Age = boss_2.Age = 56;
            Sex = boss_2.Sex = "女";

            Boss2 = boss_1 == boss_2 ? "boss_1 = boss_2" : "boss_1 != boss_2";
        }

        [RelayCommand]
        private void Zhang()
        {
            Name = boss_3.Name = "张总";
            Age = boss_3.Age = 29;
            Sex = boss_3.Sex = "男";

            Boss3 = boss_2 == boss_3 ? "boss_2 = boss_3" : "boss_2 != boss_3";
        }

        [ObservableProperty]
        private string boss1;

        [ObservableProperty]
        private string boss2;

        [ObservableProperty]
        private string boss3;


        [RelayCommand]
        private void t1()
        {
            Task.Run(() =>
            {
                while (true)
                {
                    Li();
                    Task.Delay(1000);
                }

            });
        }

        [RelayCommand]
        private void t2()
        {
            Task.Run(() =>
            {
                while (true)
                {
                    Xie();
                    Task.Delay(1500);
                }

            });
        }

        [RelayCommand]
        private void t3()
        {
            Task.Run(() =>
            {
                while (true)
                {
                    Zhang();
                    Task.Delay(2000);
                }

            });
        }
    }


http://www.kler.cn/a/104545.html

相关文章:

  • Spring Boot和XXL-Job:高效定时任务管理
  • 腾讯云 AI 绘画:文生图、图生图、图审图 快速入门
  • 使用Unity旧版本使用hotReload在开始的时候提示 PlayerSettings.suppressCommonWarnings; 找不到
  • DDOS版-超功能记事本 Ⅲ 8.8源码
  • 文献阅读(207)FPGA HBM
  • Fedora Linux 38下安装音频与视频的解码器和播放器
  • 第八章 软件测试自动化
  • python 动态加载C# 动态库的一些问题
  • css3 3D 转换 技巧详细解析与代码实例
  • Java连接redis报错timed out问题解决
  • linux安装gitlab-runner最新保姆级教程
  • 大数据-Storm流式框架(三)--Storm搭建教程
  • 【Django restframework】django跨域问题,解决PUT/PATCH/DELETE用ajax请求无法提交数据的问题
  • 鼠标移入移出修改滚动条的默认样式
  • Kafka磁盘写满日志清理操作
  • python自动化测试(二):xpath获取元素
  • 打印机连接网络后怎么安装驱动?
  • centos Let‘s Encrypt 免费https证书申请,并且自动续约
  • Docker:创建主从复制的Redis集群
  • OpenCV #以图搜图:感知哈希算法(Perceptual hash algorithm)的原理与实验