QT与DoNet中单例模式的简单实现

由于使用场景的不同,单例模式的写法也有所区别。

目前接触到的,大多数都是多线程,大量数据处理,还要考虑灵活性,对原有类结构改动最小等因素,所以写法更是多种多样。

QT个人较常用的一种写法:(两个文件:分为.h文件和.cpp文件)

复制代码
 1 class LocalBusiness : public QObject
 2 {
 3     Q_OBJECT
 4 
 5 private:
 6     QString _myName;
 7     explicit LocalBusiness(QObject *parent = nullptr);
 8     static LocalBusiness* _instance;
 9 public:
10     static LocalBusiness* Instance()
11     {
12         static QMutex mutex;
13         if (!_instance) {
14             QMutexLocker locker(&mutex);
15             if (!_instance) {
16                 _instance = new LocalBusiness;
17             }
18         }
19         return _instance;
20     }
21 public:
22     void SayHello();
23 
24 };
复制代码
复制代码
 1 LocalBusiness* LocalBusiness::_instance = nullptr;
 2 
 3 LocalBusiness::LocalBusiness(QObject *parent) : QObject(parent)
 4 {
 5     _myName="LocalBusiness";
 6 }
 7 
 8 void LocalBusiness::SayHello()
 9 {
10     qDebug() << "hello,"+_myName;
11 }
复制代码

具体调用

1     LocalBusiness::Instance()->SayHello();

C#个人较常用的写法:(一个文件:.cs文件)

复制代码
 1     public class LocalBusiness
 2     {
 3         private readonly string _myName = string.Empty;
 4         private static LocalBusiness _instance = null;
 5         private static readonly object _locker = new object();
 6 
 7         private LocalBusiness()
 8         {
 9             _myName = "LocalBusiness";
10         }
11 
12         public static LocalBusiness Instance
13         {
14             get
15             {
16                 if (_instance == null)
17                 {
18                     lock (_locker)
19                     {
20                         if (_instance == null)
21                         {
22                             _instance = new LocalBusiness();
23                         }
24                     }
25                 }
26                 return _instance;
27             }
28         }
29 
30         public void SayHello()
31         {
32             Console.WriteLine("hello,"+ _myName);
33         }
34     }
复制代码

具体调用

1             LocalBusiness.Instance.SayHello();

如果有帮助,欢迎素质三连~

posted @   李涛贤贤  阅读(246)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示