• 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. }

  • 相关阅读:
    Windows中的用户帐户与组账户
    经典面试题---【第一档】
    解决微信小程序动态生成表单情况下,遍历picker,并无法修改列表里面下标key的解决访方案
    【Spring的自动装配】
    Mysql.索引数据结构演进
    单例模式(面试常考)
    npm 如何更新项目最新依赖包
    不平衡之钥: 重加权法知几何
    SWAT-MODFLOW地表水与地下水耦合教程
    一次、两次、三次....你从羊圈的魔咒里出来了嘛~
  • 原文地址:https://blog.csdn.net/XiaoWang_csdn/article/details/134004527