工廠模式是將帶有繼承於基類的子類的建立過程交於乙個工廠來建立,通過賦予不同的建立標識來建立不同的子類。
基於自己的理解和使用這裡鞏固一下工廠模式。
我們的專案目前使用最多的是簡單工廠模式,不過其他兩種模式:工廠模式和抽象工廠模式都是由簡單工廠模式改進而來,
也很容易使用。
話不多說:見**
一、簡單工廠模式:
操作類: 介面類:creaddocumentshowhandler,三個具體類:creadwordshowhandler,creadpdfshowhandler,creadhtmlshowhandler繼承於creaddocumentshowhandler
工廠類:creaddocumentfactory 工廠類通過成員函式
creaddocumentshowhandler * createreaddochandler( int type );
建立物件,type指定具體對物件的型別。
類圖:
操作類**:
1#pragma once
2 #include 3
4class
creaddocumentshowhandler5;
1213 typedef enum
readtype
14;
2021
#pragma once
22 #include "
readdocumentshowhandler.h"23
24class
creadhtmlshowhandler :
25public
creaddocumentshowhandler26;
33#pragma once
34 #include "
readdocumentshowhandler.h"35
36class
creadpdfshowhandler :
37public
creaddocumentshowhandler38;
45#pragma once
46 #include "
readdocumentshowhandler.h"47
48class
creadwordshowhandler :
49public
creaddocumentshowhandler50;
5758 #include "
readdocumentshowhandler.h"59
6061
creaddocumentshowhandler::creaddocumentshowhandler()
6264
6566 creaddocumentshowhandler::~creaddocumentshowhandler()
6769 #include "
readhtmlshowhandler.h"70
7172
creadhtmlshowhandler::creadhtmlshowhandler()
7375
7677 creadhtmlshowhandler::~creadhtmlshowhandler()
7880
81bool
creadhtmlshowhandler::readdocumentshow()
8289
catch
(...)
9093
}94 #include "
readpdfshowhandler.h"95
9697
creadpdfshowhandler::creadpdfshowhandler()
98100
101102 creadpdfshowhandler::~creadpdfshowhandler()
103105
106bool
creadpdfshowhandler::readdocumentshow()
107113
catch
(...)
114117
}118 #include "
readwordshowhandler.h
"119
120121
creadwordshowhandler::creadwordshowhandler()
122124
125126 creadwordshowhandler::~creadwordshowhandler()
127129
130bool
creadwordshowhandler::readdocumentshow()
131137
catch
(...)
138141 }
工廠類**:
1client**#pragma once
2 #include "
readdocumentshowhandler.h"3
class
creaddocumentfactory4;
1112
1314 #include "
readdocumentfactory.h
"15 #include "
readwordshowhandler.h
"16 #include "
readpdfshowhandler.h
"17 #include "
readhtmlshowhandler.h"18
19creaddocumentfactory::creaddocumentfactory()
2022
2324 creaddocumentfactory::~creaddocumentfactory()
2527
28 creaddocumentshowhandler * creaddocumentfactory::createreaddochandler(int
type)
2945
return preaddochandler != null ?preaddochandler : null;
46 }
1 #include"二、工廠模式工廠模式是對簡單工廠模式的改進,由於之前的子類的建立都是根據type標識來建立不同的子類,所以如果子類增加,則必須在工廠建立方法中新增建立的type型別和子類型別,這違背了開放-封閉原則,所以我們,對不同的子類建立交由對應的子類工廠去建立,即:把switch case分離,單獨獨立出creadpdffactory,creadhtmlfactory,creadwordfactory繼承於creaddocumentfactory,creaddocumentfactory獨立成介面類。readdocumentfactory.h
"2 #include"
readdocumentshowhandler.h
"3 #include"
readhtmlshowhandler.h
"4 #include"
readwordshowhandler.h
"5 #include"
readpdfshowhandler.h"6
78intmain()
9
三、抽象工廠
抽象工廠是提供不同型別的類組成乙個基本部件,比如一套衣服:有上衣和短褲,抽象工廠是一組類的組合建立的方式。
簡單工廠和工廠模式都是指的是一類相同的類,抽象工廠是針對的不同類別的物件的組合,這點更複雜一點。所以在factory的建立中會有建立一組對線的成員函式,classa * createclassa();class b createclassb();具體的子類工廠去實現介面成員。
這裡給出乙個簡單的類圖:
三種工廠模式
本文介紹設計模式中的工廠模式。工廠模式,顧名思義,就是本來我們需要某樣東西,需要自己造,可有了工廠呢?我需要該東西時,只需告訴工廠,工廠就會生產該東西,一定程度上,把使用者和生產者分開了。解耦了。追本溯源,假設我們現在有乙個類a,類a裡需要類b的乙個物件,一般的處理是這樣,b b new b 但這樣...
三種工廠模式
include include include using namespace std class operation double geta const double getb const void seta double x void setb double y virtual double g...
三種工廠模式
簡單工廠模式不是23種裡的一種,簡而言之,就是有乙個專門生產某個產品的類。比如下圖中的滑鼠工廠,專業生產滑鼠,給引數0,生產戴爾滑鼠,給引數1,生產惠普滑鼠。工廠模式也就是滑鼠工廠是個父類,有生產滑鼠這個介面。戴爾滑鼠工廠,惠普滑鼠工廠繼承它,可以分別生產戴爾滑鼠,惠普滑鼠。生產哪種滑鼠不再由引數決...