??????????????????????麻煩您點個關注,不迷路????????????????????????
目 錄
9.10 C++設計模式之單例模式設計
? ?舉例說明:
9.10 C++設計模式之單例模式設計
看過我之前的文章的,簡單講解過C++/Qt的設計模式。簡單回顧一下:
回看設計模式章節點這里https://blog.csdn.net/Phofomy/article/details/131247977?spm=1001.2014.3001.5502
不想回看???我在下面放個截圖,簡單回顧一下吧~
????????實際上Qt的設計模式和C++基本上相差無幾,Qt就是C++的圖形GUI庫,其底層實現完全結合了C++的知識,可以直接使用C++進行混合編程,那看完了Qt的相關的設計模式介紹,那么我們接下來,主要學習的是C++中單例設計模式的一些基本概念和實現;
首先:C++單例設計模式是什么?
根據圖中:單例模式是一個類只有一個實例,那c++呢?其實是大同小異的!
????????C++ 單例設計模式是一種用于創建只能有一個實例的類的軟件設計模式。它確保一個類只有一個實例,并提供了一個全局訪問該實例的訪問點。
????????在單例模式中,類的構造函數必須是私有的,以防止在類的外部對其進行實例化。通過使用一個靜態方法或靜態成員函數來創建類的唯一實例,然后每次調用該方法時返回相同的實例。
? ?舉例說明:
class Singleton {
private:// 私有化構造函數,以防止在類的外部實例化該類Singleton() {}public:// 獲取單例實例的靜態成員函數static Singleton& getInstance() {// 使用靜態局部變量確保只有一個實例被創建static Singleton instance;return instance;}
};
????????C++單例設計模式實際上在開發過程中,也是比較常用的設計模式之一。使用單例模式,可以保證在整個程序執行期間只有一個類的實例存在,從而確保全局共享和唯一性。這在需要創建唯一資源或共享狀態的情況下非常有用,例如數據庫連接、日志記錄器或全局配置對象等。
????????單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例而且該實例易于外界訪問,從而方便對實例個數的控制并節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案;
案例: 實現一個單例模式
代碼:
#include <iostream>using namespace std;
class Singleton{ //單例模式
private://構造私有化 防止實例化其他對象 將構造函數私有化,外界無法構造函數Singleton(){count=0;cout<<"構造"<<endl;}Singleton(const Singleton &ob){count=0;}~Singleton(){cout<<"析夠"<<endl;}
private://第二步:定義一個靜態的指針變量保存唯一實例的地址//const防止p 在類內部 被修改指向static Singleton * const p;//保存唯一的實例地址int count;//統計任務執行次數
public://第三步: 獲取唯一的實例地址static Singleton * getSingleton(void){return p;}//第四步:實現用戶自定義的操作函數void printString(const char *str){cout << "打印:"<<str<<endl;}
};//這一步也很重要,初始化一個單例實例指針
Singleton * const Singleton::p = new Singleton;void test01(){Singleton *p1 = Singleton::getSingleton();p1->printString("離職證明p1_1");p1->printString("身份證明p1_2");p1->printString("學歷證明p1_3");Singleton *p2 = Singleton::getSingleton();p2->printString("離職證明p2_1");//按住alt鼠標下拉可以同時修改一列p2->printString("身份證明p2_2");p2->printString("學歷證明p2_3");
}
int main()
{test01();return 0;
}
????????注意:在多線程環境下,需要考慮線程安全性,并采取適當的線程安全措施來保護單例實例的創建和訪問。
代碼:
class Singletons {
private:// 將構造函數和拷貝構造函數設為私有,以防止在類的外部實例化該類或進行拷貝構造Singletons() {}Singletons(const Singletons&) {}static Singletons* instance; // 單例實例的指針public:// 獲取單例實例的靜態成員函數static Singletons& getInstance() {// 使用雙重檢查鎖定確保線程安全if (instance == nullptr) {// 加鎖// ...if (instance == nullptr) {instance = new Singletons();}// 解鎖// ...}return *instance;}void printMessage() {std::cout << "Hello, Singleton!" << std::endl;}
};Singletons* Singletons::instance = nullptr; // 初始化單例實例指針為空void test02() {Singletons& singleton = Singletons::getInstance(); // 獲取單例實例singleton.printMessage(); // 調用打印方法
}
以上,就是我們對C++的單例設計模式一個學習內容,看完的小伙伴記得去敲一遍代碼試試哦。
點贊👍? + 收藏👐 + 關注👌
??您的支持??,是博主最大的動力??!!互相學習??!!共同進步??!!一起搞錢??!!??
???????????????????????????????????????????????????????????????