軟體中,有時需要將物件的建立與使用分離,這時就需要簡單工廠模式了。
一、簡單工廠模式的三個角色
1)工廠(factory)角色: 簡單工廠模式的核心,它負責實現建立所有的例項的內部邏輯。工廠類可以被外界直接呼叫,建立所需的產品物件。
2)抽象產品(abstractproduct)角色:簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。
3)具體產品(concrete product)角色:簡單工廠模式所建立的具體例項物件。
圖(1) 簡單工廠模式的uml圖
二、適用場景
1)工廠類負責建立的物件比較少,由於建立的物件比較少,不會造成工廠方法中的業務邏輯太過複雜。
2)客戶端只知道傳入工廠類的引數,對於如何建立物件並不關心。
三、工廠模式的優缺點
1)優點
1.1) 實現了物件建立和使用的分離;
1.2) 不需要記住具體類名,記住引數即可,減少使用者的記憶負擔。
2) 缺點:
2.1)對工廠類職責過重,一旦不能工作,系統受到影響;
2.2)增加系統中類的個數,複雜度和理解度增加;
2.3)違反"開閉原則",新增新產品需要修改工廠邏輯,工廠越來越複雜。
四、案例
圖(2) 水果類的簡單工廠模式uml圖
4.1 原設計 ver1.1
#define _crt_secure_no_warnings
#include
#include
using
namespace std;
class
fruit
elseif(
this
->kind ==
"banana")}
void
getname()
elseif(
this
->kind ==
"banana")}
private
: string kind;
//水果的種類};
//工廠模式的目的,就是讓業務層和類的建構函式之間解耦合,
//盡量降低乙個類的複雜度
intmain
(void
)
4.2)加入了簡單工廠模式的設計 ver1.2
#define _crt_secure_no_warnings
#include
#include
using
namespace std;
//水果類
class
fruit
;class
:public fruit};
class
banana
:public fruit};
//乙個工廠
class
factory
else
if(kind ==
"banana")}
};intmain
(void
)
版本ver1.2 比ver1.1**的可維護性、可擴充套件性要好。 軟體設計模式 簡單工廠模式
軟體體系結構與設計模式相關相關知識 客戶端直接通過car類的子類實現相關功能 1 高度耦合 2 條件語句塊需要寫在客戶端內,特別難看 3 客戶程式需要知道服務類的全部的細節才能實現使用工廠模式,將選擇與初始化乙個合適的類,將功能封裝在這個類當中的專門的方法當中 強調 委託的思想,客戶不需要知道服務的...
工廠模式 簡單工廠
簡單工廠其實並不是乙個設計模式,反而比較像一種程式設計習慣。我個人的這樣總結簡單工廠 建立乙個類,封裝建立物件的 故事 現在我要開一家披薩店,叫bbk 必敗客 披薩,賣很多種披薩 芝士披薩 榴蓮披薩等等,我有乙個orderpizza string type 方法,根據客戶傳來的type來提供不同的披...
工廠模式 簡單工廠
工廠 處理建立物件的細節。目的 將例項化具體類的 從應用中抽離,或者封裝起來,可以避免干擾應用的其他部分。簡單工廠 簡單工廠其實不是乙個設計模式,反而像一種程式設計習慣。產品實現 desc 產品a public inte ce a class a1 implements a override pub...