QT与DoNet中单例模式的简单实现
2024-09-06 11:47:06
由于使用场景的不同,单例模式的写法也有所区别。
目前接触到的,大多数都是多线程,大量数据处理,还要考虑灵活性,对原有类结构改动最小等因素,所以写法更是多种多样。
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();
如果有帮助,欢迎素质三连~
最新文章
- 使用Number.parseFloat引发的悲剧
- 分享一个移动项目中消除click事件点击延迟的方法
- Turn.js 实现翻书效果的学习与总结
- static关键字的用法和main函数
- Div+Css的初步运用
- MonkeyRunner源码分析之-谁动了我的截图?
- STL_deque双端队列
- photoshop软件应用手记
- Java:用Lambda表达式简化代码一例
- JMeter集合点
- Xcode7.3.1中SKAudioNode在Scene转换后无声的问题
- 关于package,import,和“找不到可以加载的主类”报错之间的关系
- 田螺便利店—filezilla实现Linux和windows通信(二)
- 关于div容器在ie6下默认高度不为0(存在默认高度)
- 数据库sql语句例题(转)
- Python-ccs高级选择器 盒模型
- mvc+struct1+struct2
- git命令收集(记得持续更新)
- Docker01 CentOS配置Docker
- Linux下的Make命令实例详解