• C#演示单例模式


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

    1.  //单例模式的实现
    2.     internal class Boss
    3.     {
    4.         //定义静态变量保存实例
    5.         private static Boss uniqueBoss;
    6.         //定义锁,确保线程访问安全
    7.         private static readonly object _lock = new object();
    8.         //定义私有构造函数,使外界不能创建该类实例
    9.         private Boss()
    10.         {
    11.         }
    12.         //定义公有方法提供一个全局访问点,
    13.         public static Boss GetBoss()
    14.         {
    15.             //关键代码加锁
    16.             lock (_lock)
    17.             {
    18.                 //如果类的实例不存在则创建,否则直接返回
    19.                 if (uniqueBoss == null)
    20.                 {
    21.                     uniqueBoss = new Boss();
    22.                 }
    23.             }
    24.             return uniqueBoss;
    25.         }
    26.     }
    27.     //双判断模式的写法:
    28.      internal class Person
    29.     {
    30.         private Person() { }
    31.         private static Person _instance;
    32.         private static readonly object _instanceLock = new object();
    33.         public static Person Instance()
    34.         {
    35.             if (_instance == null)
    36.             {
    37.                 lock (_instanceLock)
    38.                 {
    39.                     if (_instance == null)
    40.                     {
    41.                         _instance = new Person();
    42.                     }
    43.                 }
    44.             }
    45.             return _instance;
    46.         }
    47.     }

    实际使用:

    1. partial class Singleton_ViewModel : ObservableObject
    2. {
    3. //创建很多个Boss变量
    4. Boss boss_1 = Boss.GetBoss();
    5. Boss boss_2 = Boss.GetBoss();
    6. Boss boss_3 = Boss.GetBoss();
    7. [ObservableProperty]
    8. private string name;
    9. [ObservableProperty]
    10. private int age;
    11. [ObservableProperty]
    12. private string sex;
    13. [RelayCommand]
    14. private void Li()
    15. {
    16. Name = boss_1.Name = "李总";
    17. Age = boss_1.Age = 38;
    18. Sex = boss_1.Sex = "男";
    19. Boss1 = boss_1 == boss_2 ? "boss_1 = boss_2" : "boss_1 != boss_2";
    20. }
    21. [RelayCommand]
    22. private void Xie()
    23. {
    24. Name = boss_2.Name = "谢总";
    25. Age = boss_2.Age = 56;
    26. Sex = boss_2.Sex = "女";
    27. Boss2 = boss_1 == boss_2 ? "boss_1 = boss_2" : "boss_1 != boss_2";
    28. }
    29. [RelayCommand]
    30. private void Zhang()
    31. {
    32. Name = boss_3.Name = "张总";
    33. Age = boss_3.Age = 29;
    34. Sex = boss_3.Sex = "男";
    35. Boss3 = boss_2 == boss_3 ? "boss_2 = boss_3" : "boss_2 != boss_3";
    36. }
    37. [ObservableProperty]
    38. private string boss1;
    39. [ObservableProperty]
    40. private string boss2;
    41. [ObservableProperty]
    42. private string boss3;
    43. [RelayCommand]
    44. private void t1()
    45. {
    46. Task.Run(() =>
    47. {
    48. while (true)
    49. {
    50. Li();
    51. Task.Delay(1000);
    52. }
    53. });
    54. }
    55. [RelayCommand]
    56. private void t2()
    57. {
    58. Task.Run(() =>
    59. {
    60. while (true)
    61. {
    62. Xie();
    63. Task.Delay(1500);
    64. }
    65. });
    66. }
    67. [RelayCommand]
    68. private void t3()
    69. {
    70. Task.Run(() =>
    71. {
    72. while (true)
    73. {
    74. Zhang();
    75. Task.Delay(2000);
    76. }
    77. });
    78. }
    79. }

  • 相关阅读:
    C++实现演讲比赛流程管理系统
    Linux:进程管理 | 进程创建 | 进程终止 | 进程等待 | 进程替换
    【单片机】13-实时时钟DS1302
    【JAVA高级】——玩转JDBC中的三层架构
    Wireshark原理介绍
    Allegro光绘Gerber文件、IPC网表、坐标文件、装配PDF文件导出打包
    LeetCode:2216. 美化数组的最少删除数(C++)
    [Java EE] 多线程(一) :线程的创建与常用方法(上)
    Cy7 Tyramide,Tyramide-Cy7,花青素Cy7 酪酰胺,Cy7酪胺
    Springboot2.3.12集成swagger2.10.5时出现的问题
  • 原文地址:https://blog.csdn.net/XiaoWang_csdn/article/details/134004527