C 三種工廠模式

2022-03-27 07:14:11 字數 4431 閱讀 7099

工廠模式是將帶有繼承於基類的子類的建立過程交於乙個工廠來建立,通過賦予不同的建立標識來建立不同的子類。

基於自己的理解和使用這裡鞏固一下工廠模式。

我們的專案目前使用最多的是簡單工廠模式,不過其他兩種模式:工廠模式和抽象工廠模式都是由簡單工廠模式改進而來,

也很容易使用。

話不多說:見**

一、簡單工廠模式:

操作類: 介面類: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 }

工廠類**:

1

#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 }

client**

1 #include"

readdocumentfactory.h

"2 #include"

readdocumentshowhandler.h

"3 #include"

readhtmlshowhandler.h

"4 #include"

readwordshowhandler.h

"5 #include"

readpdfshowhandler.h"6

78intmain()

9

二、工廠模式工廠模式是對簡單工廠模式的改進,由於之前的子類的建立都是根據type標識來建立不同的子類,所以如果子類增加,則必須在工廠建立方法中新增建立的type型別和子類型別,這違背了開放-封閉原則,所以我們,對不同的子類建立交由對應的子類工廠去建立,即:把switch case分離,單獨獨立出creadpdffactory,creadhtmlfactory,creadwordfactory繼承於creaddocumentfactory,creaddocumentfactory獨立成介面類。

三、抽象工廠

抽象工廠是提供不同型別的類組成乙個基本部件,比如一套衣服:有上衣和短褲,抽象工廠是一組類的組合建立的方式。

簡單工廠和工廠模式都是指的是一類相同的類,抽象工廠是針對的不同類別的物件的組合,這點更複雜一點。所以在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,生產惠普滑鼠。工廠模式也就是滑鼠工廠是個父類,有生產滑鼠這個介面。戴爾滑鼠工廠,惠普滑鼠工廠繼承它,可以分別生產戴爾滑鼠,惠普滑鼠。生產哪種滑鼠不再由引數決...