觀察者模式,單例模式和工廠模式


持續更新中...

觀察者模式:

https://blog.csdn.net/colinandroid/article/details/81113013

觀察者模式:定義對象間一種一對多的依賴關系,使得每當一個對象改變狀態,則所有依賴它的對象都會得到通知並自動更新。

Subject:就是“被觀察”的角色,它將所有觀察者對象的引用保存在一個集合中。

(1)保存注冊的觀察者對象

(2)注冊觀察者對象

(3)注銷觀察者對象

(4)通知所有注冊的觀察者對象

Observer:是抽象的“觀察”角色,它定義了一個更新接口,使得在被觀察者狀態發生改變時通知自己。

ConcreteObserver:具體的觀察者。

 

單例模式:

https://blog.csdn.net/q_all_is_well/article/details/82377917

實現特點:

(1)私有化該類的構造函數

(2)通過new在本類中創建一個本類對象

(3)定義一個公有的方法,將在該類中所創建的對象返回

實現方法:

(1)單例模式的餓漢式:餓了肯定要飢不擇食。所以在單例類定義的時候就進行實例化

(2)單例模式懶漢式雙重校驗鎖:在第一次用到類實例的時候才會去實例化

#include<mutex>
using namespace std;

class Singleton
{
private:
    static Singleton* m_instance;
    Singleton() {}
    //拷貝和賦值
    Singleton(const Singleton&) {};
    Singleton& operator=(const Singleton&) {};
    //它的唯一工作就是在析構函數中刪除Singleton的實例
    class CGarbo 
    {
    public:
        ~CGarbo()
        {
            if (Singleton::m_instance)
                delete Singleton::m_instance;
        }
    };
    //定義一個靜態成員,程序結束時,系統會自動調用它的析構函數
    static CGarbo Garbo; 

public:
    static Singleton* getInstance();
};

Singleton* Singleton::getInstance()
{
    if (NULL == m_instance)
    {
        std::mutex g_mutex;
        g_mutex.lock();//借用其它類來實現,如boost
        if (NULL == m_instance)
        {
            m_instance = new Singleton;
        }
        g_mutex.unlock();
    }
    return m_instance;
}

(3)內部類

 

工廠模式:

https://blog.csdn.net/u012156116/article/details/80857255

工廠方法模式定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類

(1)簡單工廠模式:一個工廠+一個運算基類+n個具體的運算類

(2)工廠模式:簡單工廠+n個具體的工廠(解決簡單工廠的高耦合,缺點是每增加一個產品類,就需要增加一個對應的工廠類,增加了額外的開發量)

(3)抽象工廠模式:(解耦,例業務邏輯與數據訪問的解耦)(https://cloud.tencent.com/developer/article/1394271


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM