1.工廠類(factory):核心部分,負責實現建立所有產品的內部邏輯,工廠類可以被外界直接呼叫,建立所需物件。
2.抽象產品類:工廠類所建立的所有物件的父類,封裝了產品物件的公共方法,所有的具體產品為其子類物件。
3.產品類:簡單工廠模式的建立目標,所有被建立的物件都是某個具體類的例項。它要實現抽象產品中宣告的抽象方法(有關抽象類)。
**示例:
結果展示:/*
* @description:
* @version: 2.0
* @author: feng chao
* @date: 2021-02-24 13:58:22
* @lasteditors: feng chao
* @lastedittime: 2021-02-24 15:40:50
*/#include "../common.h"
typedef enum
type_food;
//抽象產品類
class cfood
; virtual void showfoodname(){};
virtual ~cfood(){};
};//具體產品類a
class cfood_a : public cfood
void showfoodname()
~cfood_a()
};//具體產品類b
class cfood_b : public cfood
void showfoodname()
~cfood_b()
};//具體產品類c
class cfood_c : public cfood
void showfoodname()
~cfood_c()
};//工廠類
class cfoodfactory
}~cfoodfactory()
以上**,如果去掉delete語句,結果:i'm food_a
i'm food_b
i'm food_c
delete food_a
delete food_b
delete food_c
delete cfoodfactory
這就是普通指標的不足之處。i'm food_a
i'm food_b
i'm food_c
使用unique_ptr智慧型指標:
unique_ptr實現獨佔式擁有或嚴格擁有概念,保證同一時間內只有乙個智慧型指標可以指向該物件。它對於避免資源洩露(例如「以new建立物件後因為發生異常而忘記呼叫delete」)特別有用。另外unique_ptr還有更聰明的地方:當程式試圖將乙個 unique_ptr 賦值給另乙個時,如果源 unique_ptr 是個臨時右值,編譯器允許這麼做;如果源 unique_ptr 將存在一段時間,編譯器將禁止這麼做。
會正常析構:int main()
使用shared_ptr智慧型指標:delete cfoodfactory
delete cfoodfactory
shared_ptr實現共享式擁有概念。多個智慧型指標可以指向相同物件,該物件和其相關資源會在「最後乙個引用被銷毀」時候釋放。從名字share就可以看出了資源可以被多個指標共享,它使用計數機制來表明資源被幾個指標共享。可以通過成員函式use_count()來檢視資源的所有者個數。除了可以通過new來構造,還可以通過傳入auto_ptr, unique_ptr,weak_ptr來構造。當我們呼叫release()時,當前指標會釋放資源所有權,計數減一。當計數等於0時,資源會被釋放。
**:
結果:int main()
delete cfoodfactory
share_ptr雖然已經很好用了,但是有一點share_ptr智慧型指標還是有記憶體洩露的情況,當兩個物件相互使用乙個shared_ptr成員變數指向對方,會造成迴圈引用,使引用計數失效,從而導致記憶體洩漏。
weak_ptr 是一種不控制物件生命週期的智慧型指標, 它指向乙個 shared_ptr 管理的物件. 進行該物件的記憶體管理的是那個強引用的shared_ptr, weak_ptr只是提供了對管理物件的乙個訪問手段。weak_ptr 設計的目的是為配合 shared_ptr 而引入的一種智慧型指標來協助 shared_ptr 工作, 它只可以從乙個 shared_ptr 或另乙個 weak_ptr 物件構造, 它的構造和析構不會引起引用記數的增加或減少。weak_ptr是用來解決shared_ptr相互引用時的死鎖問題,如果說兩個shared_ptr相互引用,那麼這兩個指標的引用計數永遠不可能下降為0,資源永遠不會釋放。它是對物件的一種弱引用,不會增加物件的引用計數,和shared_ptr之間可以相互轉化,shared_ptr可以直接賦值給它,它可以通過呼叫lock函式來獲得shared_ptr。
暫時不補充其它的**和介紹。
簡單工廠模式,工廠模式,抽象工廠模式
三種模式看了一天,記錄下自己的理解 headfirst,比薩店為例 1,簡單工廠模式 乙個具體的工廠類 pizzafactory 乙個抽象的產品類pizza,可以派生出多個具體的產品類 客戶 pizzastore類 工廠類 pizzafactory類關聯產品類pizza,工廠生產出不同型別的pizz...
簡單工廠模式 工廠模式 抽象工廠模式
簡單工廠模式 簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關類,對於客戶端來說,去除了與具體產品的依賴。但增加功能時,需增加 case 邏輯判斷分支條件,修改了原有的類,我們不但對擴充套件開發了,對修改也開放了,違背了開放 封閉原則。工廠方法模式,定義了乙...
簡單工廠模式 工廠模式 抽象工廠模式
其實這個三個c 的設計模式已經學習很長時間了,今晚才想起來要寫這三個設計模式,為什麼要用c 中的設計模式呢?for example,你已經會開車了,正著開,倒著開,轉彎,這些都是開車基本的,但是你並沒有很高的車技,並不會炫酷。漂移,就好像c 中的設計模式一樣,在你學好c 的基礎上,嫻熟的應用出的新技...