1、兩個設計模式的結合
在實際的專案中,很可能會存在這麼一種情況,既然工廠可以生產產品,那麼我不希望建造很多的工廠(因為當工廠越來越多的時候,我的管理壓力也越來越重),所以我希望可以有這麼一種情況,工廠我只建立乙個,用來生產產品,當然了同時若是生產該工廠生產不了的產品,則必須先把該共產拆了(delete),才能建另一工廠生產另外的產品
2、選擇工廠模式和單例類
下面簡單的將工廠的設計模式和單例類結合,使得工廠只能建造一所(單例類實現)
3、理解後,自己敲**時的一些注意事項
a、取名字的規範性,取名字時盡量讓自己後面**提示的時候看得明白這是個什麼東西,對於一些名字感覺是一樣的但是資料型別完全不同的量,為了方便**提示,可以在起名字時在最前面做區別(例如:fectory 和 efectory)
4、部分**
a、工廠單例類.h
#ifndef _fectory_center_singleton_h_
#define _fectory_center_singleton_h_
#include
#include
"fectory_enum.h"
#include
"protect.h"
using namespace std;
class fectory_center_singleton
; virtual~
fectory_center_singleton()
;public:
static fectory_center_singleton *
get_f_c_s
(fectoryenum type)
;static
void
destroyfector()
; virtual producta *
createprotecta()
=0; virtual productb *
createprotectb()
=0;private:
static fectory_center_singleton *m_factor;};
#endif
b、工廠單例類的實現.cpp#include
#include
"fectory_center_singleton.h"
#include
"fectory_enum.h"
#include
"protect.h"
#include
"fectory.h"
//靜態變數的初始化
fectory_center_singleton *fectory_center_singleton:
:m_factor =
null
; fectory_center_singleton *fectory_center_singleton:
:get_f_c_s
(fectoryenum type)
return m_factor;
}return m_factor;
}void fectory_center_singleton:
:destroyfector()
}
c、其他**還有( )
1、工廠選擇(列舉).h
#ifndef _fectory_enum_h_
#define _fectory_enum_h_
typedef
enum fectory
fectoryenum;
#endif
2、不同工廠.h
#ifndef _fectory_h_
#define _fectory_h_
#include
"fectory_center_singleton.h"
#include
"protect.h"
class fectory1 : public fectory_center_singleton
productb *
createprotectb()
};class fectory2 : public fectory_center_singleton
productb *
createprotectb()
};#endif
3、不同產品.h
#ifndef _protect_h_
#define _protect_h_
#include
using namespace std;
class producta
;class producta1 : public producta
private:};
class producta2 : public producta
private:};
//**************************protuctb*******************************
class productb
;class productb1 : public productb
private:};
class productb2 : public productb
private:};
#endif
4、測試.h
#include
#include
"fectory.h"
#include
"fectory_center_singleton.h"
#include
"fectory_enum.h"
#include
"protect.h"
using namespace std;
intmain
(void
) else
*///測試2
//若是注釋這句話,下面的工廠還是fectory1,因為fectory_center_singleton是乙個單例類,不允許建兩個工廠
fectory1->
destroyfector()
; fectory_center_singleton *fectory3 = fectory_center_singleton:
:get_f_c_s
(kfectory_2)
; producta *producta2 = fectory3->
createprotecta()
; productb *productb2 = fectory3->
createprotectb()
;system
("pause");
}
5、
自己理解的也比較淺顯,**中關於析構沒有深入去想,關於這個單例類的析構,一般是程式在執行他就在那裡,程式退出了他自動**了,很少存在需要中間**單例類記憶體的情況,不過在網上也看到了一些關於單例類析構的方法, 也只好之後再做做研究
設計模式04 抽象工廠模式
抽象工廠模式是物件的建立模式,它是工廠方法模式的進一步推廣。抽象工廠模式與工廠方法模式的最大差別就在於工廠方法模式針對的是乙個產品等級結構 而抽象工廠模式則須要面對多個產品等級結構。如果乙個子系統須要一些產品物件,而這些產品又屬於乙個以上的產品等級結構。那麼為了將消費這些產品物件的責任和建立這些產品...
設計模式 工廠模式(學習筆記)
披薩專案 要方便專案的擴充套件,要便於維護 要能執行時擴充套件。披薩族設計 不足之處 披薩只能prepare bake cut box操作,增加新功能需要更改原始抽象類,程式擴充套件性低。簡單工廠模式的設計方案 定義乙個例項化披薩物件的類,封裝建立物件的 將例項部分與抽象超類分隔開,放在工廠裡提高擴...
設計模式 工廠模式和單例模式
在平常實用類的時候,往往要進行類功能的擴充套件,如果直接在裡面進行擴充套件,有可能會對類裡面的其他功能產生影響,所以在擴充套件功能的時候就要重新寫類,這就要採用繼承的方式,如 1 class yunsuan 2 8 9class jia extends yunsuan 造乙個加的子類繼承父類 10 ...