生活随笔
收集整理的這篇文章主要介紹了
设计模式:UML类图、策略模式、单例模式、工厂模式、观察者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、UML類圖:
類與類之間存在6個關系:
1)依賴:類A用到了類B,不是成員變量中用到,而是在成員函數中用到了
2)關聯:類A使用了類B,并且是在成員變量中用到的
3)聚合:和關聯類似,也是使用實例化來關聯,一個是整體,一個是部分
4)組合:相比聚合具有更強的耦合度。部分沒有單獨存在的意義,整體負責單獨的生命周期。
5)繼承:
6)實現:純虛函數
二、策略模式:
strategy中的算法經常變化。所以將strategy中的算法作為虛函數,在派生類中進行重寫。Context中包含了一個strategy對象的指針,可以根據需求將該指針指向ABC類。需要添加算法的時候,只要添加派生類,context和strategy不需要修改。
class Strategy{virtual AlgorithmInterface()=0;
};class A:public Strategy
{AlgorithmInterface();
};class B:public Strategy
{AlgorithmInterface();
};class C:public Strategy
{AlgorithmInterface();
};Class
Context{Strategy
* strategy
;void ContextInterface(){strategy
->AlgorithmInterface();
}
三、單例模式: 保證一個類只有一個實例
1)懶漢版本:不到萬不得已就不會去實例化類,第一次用到類實例的時候才會去實例化
2)餓漢:饑不擇食,在單例類定義的時候就進行實例化
懶漢版本:
class Singleton
{
public:static Singleton
* m_instance
;static Singleton
* getInstance();
private://將構造函數和析構函數私有化
static mutex SingletonMutex
;Singleton() {};~Singleton() {};
};static Singleton
::m_instance
= nullptr;
static Singleton
* Singleton
::getInstance() {if (m_instance
== nullptr) {SingletonMutex
.lock();if (m_instance
== nullptr) {m_instance
= new Singleton();}SingletonMutex
.unlock();}return m_instance
;
}
為什么要判斷兩次nullptr?
當類沒有被實例話的時候,兩個進程同時通過了第一個nullptr,一個線程加鎖并且實例化,解鎖后另一個線程也會實例化。因此要兩次判斷。
餓漢版本:
class Singleton
{
public:static Singleton
* m_instance
;static Singleton
* getInstance();
private:Singleton() {};~Singleton() {};
};
static Singleton
::m_instance
= new Singleton();
static Singleton
* Singleton
::getInstance() {return m_instance
;
}
四、工廠方法模式:
簡單工廠模式,工廠類包含了邏輯判斷,會根據輸入來判斷實例化哪一個類,但是如果要添加類的時候,需要需改工廠類,違背了開放—封閉原則。因此工廠方法定義了抽象類用于實例化對象的純虛函數 ,他的子類來負責實例化
class ISplitter
{
public:ISplitter();virtual ~ISplitter(); virtual void split() = 0;
};class PictureISplitter:public ISplitter
{
public:PictureISplitter();virtual ~PictureISplitter();virtual void split() {};
};class BinaryISplitter:public ISplitter
{
public:BinaryISplitter();virtual ~BinaryISplitter();virtual void split() {};
};class SplitterFactory
{
public:SplitterFactory();virtual ~SplitterFactory();virtual ISplitter
* createSplitter() = 0;
};class PictureSplitterFactory:public SplitterFactory
{
public:PictureSplitterFactory();virtual ~SplitterFactory();virtual ISplitter
* createSplitter
{return new PictureISplitter();}
};class BinarySplitterFactory :public SplitterFactory
{
public:BinarySplitterFactory();virtual ~BinarySplitterFactory();virtual ISplitter
* createSplitter
{return new BinaryISplitter();}
};
五、抽象工廠模式:
之前的工廠模式product只有一個,當product有多個的時候,并且product的派生類之間有依賴關系的時候,則可以用同一個具體工廠同時創建這些對象
六、觀察者模式:
定義了一對多的依賴關系,多個觀察者對同一個對象進行觀察,當被觀察對象發生了改變會通知所有的觀察者,觀察者會根據這個進行相應的措施。
總結
以上是生活随笔為你收集整理的设计模式:UML类图、策略模式、单例模式、工厂模式、观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。