# 设计模式
# UML
# 类与类之间的关系
# 设计模式三大原则
# 单一职责原则
# 单例模式
在一个项目中,全局范围内,某个类的实例一切仅有一个,通过这个唯一的实例向其他模块提供数据,这种模式就是单例模式。单例模式的典型的应用就是任务队列.
# 饿汉模式
| class Singleton{ |
| public: |
| static Singleton* getInstance(){ |
| return Instance; |
| } |
| private: |
| Singleton(){}; |
| static Singleton* Instance; |
| }; |
| Singleton* Singleton::Instance = new Singleton; |
# 懒汉模式
| class Singleton{ |
| public: |
| static Singleton* getInstance(){ |
| if(Instance == nullptr) Instance = new Singleton(); |
| return Instance; |
| } |
| private: |
| Singleton(){}; |
| static Singleton* Instance; |
| }; |
| Singleton* Singleton::Instance = nullptr; |
- 有线程安全问题,需要使用互斥锁(双重检查锁定
DCL, Double Checked Lock
+ 原子变量、静态局部变量)
| class Singleton{ |
| public: |
| static Singleton* getInstance(){ |
| m_mutex.lock(); |
| if(Instance == nullptr) Instance = new Singleton(); |
| m_mutex.unlock(); |
| return Instance; |
| } |
| private: |
| Singleton(){}; |
| static Singleton* Instance; |
| static mutex m_mutex; |
| }; |
| Singleton* Singleton::Instance = nullptr; |
| Singleton* Singleton::mutex; |
| class Singleton{ |
| public: |
| static Singleton* getInstance(){ |
| if(Instance == nullptr){ |
| m_mutex.lock(); |
| if(Instance == nullptr) Instance = new Singleton(); |
| m_mutex.unlock(); |
| } |
| return Instance; |
| } |
| private: |
| Singleton(){}; |
| static Singleton* Instance; |
| static mutex m_mutex; |
| }; |
| Singleton* Singleton::Instance = nullptr; |
| Singleton* Singleton::mutex; |
# 工厂模式
# 简单工厂模式
# 工厂模式
# 抽象工厂模式