設計模式(2)簡單工廠模式
定義:簡單工廠模式(Simple Factory Pattern)屬於類的創新型模式,又叫靜態工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。
型別:建立類模式
類圖:
工廠角色(Creator):這是簡單工廠模式的核心,由它負責建立所有的類的內部邏輯。當然工廠類必須能夠被外界呼叫,建立所需要的產品物件。
抽象(Product)產品角色:簡單工廠模式所建立的所有物件的父類,注意,這裡的父類可以是介面也可以是抽象類,它負責描述所有例項所共有的公共介面。
具體產品(Concrete Product)角色:簡單工廠所建立的具體例項物件,這些具體的產品往往都擁有共同的父類。
簡單工廠模式:
簡單工廠模式解決的問題是如何去例項化一個合適的物件。
簡單工廠模式的核心思想就是:有一個專門的類來負責建立例項的過程。
具體來說,把產品看著是一系列的類的集合,這些類是由某個抽象類或者介面派生出來的一個物件樹。而工廠類用來產生一個合適的物件來滿足客戶的要求。
如果簡單工廠模式所涉及到的具體產品之間沒有共同的邏輯,那麼我們就可以使用介面來扮演抽象產品的角色;如果具體產品之間有功能的邏輯或,我們就必須把這些共同的東西提取出來,放在一個抽象類中,然後讓具體產品繼承抽象類。為實現更好複用的目的,共同的東西總是應該抽象出來的。
簡單工廠模式的優缺點:
優點:工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的資訊,決定究竟應該建立哪個具體類的物件。使用者在使用時可以直接根據工廠類去建立所需的例項,而無需瞭解這些物件是如何建立以及如何組織的。有利於整個軟體體系結構的優化。
缺點:由於工廠類集中了所有例項的建立邏輯,這就直接導致一旦這個工廠出了問題,所有的客戶端都會受到牽連;而且由於簡單工廠模式的產品是基於一個共同的抽象類或者介面,這樣一來,當產品的種類增加的時候,即有不同的產品介面或者抽象類的時候,工廠類就需要判斷何時建立何種種類的產品,這就和建立何種種類產品的產品相互混淆在了一起,違背了單一職責,導致系統喪失靈活性和可維護性。而且更重要的是,簡單工廠模式違背了“開放封閉原則”,就是違背了“系統對擴充套件開放,對修改關閉”的原則,因為當我新增加一個產品的時候必須修改工廠類,相應的工廠類就需要重新編譯一遍。
總結一下:簡單工廠模式分離產品的建立者和消費者,有利於軟體系統結構的優化;但是由於一切邏輯都集中在一個工廠類中,導致了沒有很高的內聚性,同時也違背了“開放封閉原則”。另外,簡單工廠模式的方法一般都是靜態的,而靜態工廠方法是無法讓子類繼承的,因此,簡單工廠模式無法形成基於基類的繼承樹結構。
典型應用:
題目:請用C++、Java、C#或VB.NET任意一種面嚮物件語言實現一個計算器控制檯程式,要求輸入兩個數和運算子號,得到結果。
類圖:
程式碼:
運算類
class Operation
{
public:
double numberA = 0;
double numberB = 0;
public:
Operation();
~Operation();
virtual double GetResult()
{
double result = 0;
return result;
}
};
加法類
class OperationAdd :
public Operation
{
public:
OperationAdd();
~OperationAdd();
double GetResult()
{
double result = 0;
result = numberA + numberB;
return result;
}
};
減法類
class OperationSub :
public Operation
{
public:
OperationSub();
~OperationSub();
double GetResult()
{
double result = 0;
result = numberA - numberB;
return result;
}
};
乘法類
class OperationMul :
public Operation
{
public:
OperationMul();
~OperationMul();
double GetResult()
{
double result = 0;
result = numberA*numberB;
return result;
}
};
除法類
class OperationDiv :
public Operation
{
public:
OperationDiv();
~OperationDiv();
double GetResult()
{
double result = 0;
if (numberB = 0)
{
exit(-1);
}
result = numberA / numberB;
return result;
}
};
工廠類
class OperationFactory
{
public:
OperationFactory();
~OperationFactory();
static Operation *createOperate(char operate)
{
Operation *oper=NULL;
switch (operate)
{
case '+':
{
oper = new OperationAdd();
break;
}
case '-':
{
oper = new OperationSub();
break;
}
case '*':
{
oper = new OperationMul();
break;
}
case '/':
{
oper = new OperationDiv();
break;
}
default:
break;
}
return oper;
}
};
客戶端
Operation *oper;
char str='+';
oper = OperationFactory::createOperate(str);
oper->numberA = 1;
oper->numberB = 2;
double result = oper->GetResult();
由客戶端我們可以看出,運用了簡單工廠模式,業務邏輯與介面邏輯就分開了,客戶端無需知道運算操作是如何實現的,就可以得到想要的結果,但是如果你需要增加功能,如平方根,立方根,自然對數等等,則不僅需要增加相關的運運算元類,還需修改工廠類,這顯然違背了開放封閉原則,如果不斷的增加功能,也會增加工廠類的運算幅度,違背了單一職責原則。
相關推薦
設計模式(2)----簡單工廠模式
只知道 wid lin 通過 trac 復雜 創建 調用 lvs 說明一下: 簡單工廠模式不屬於23種GOF設計模式之一,我之所以寫出來,是應為簡單工廠模式是工廠模式的基礎,23種中的工廠方法模式是從中衍生的。 簡介: 簡單工廠模式是屬於創建型模式,又叫做靜態工廠方法(St
設計模式(2)簡單工廠模式
定義:簡單工廠模式(Simple Factory Pattern)屬於類的創新型模式,又叫靜態工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。 型別:建立類模式 類圖:
設計模式(四)簡單工廠模式
spa 電腦 tco null 繼承 string 我們 實例 tro 相關文章 設計模式(一)設計六大原則 設計模式(二)單例模式的七種寫法 設計模式(三)建造者模式 1.簡單工廠模式簡單介紹 定義 簡單工廠模式屬於創建型模式又叫做靜
常用的軟體設計模式(二)簡單工廠模式
剛參加工作的時候,絲毫沒有面向物件的思想,所有分支都使用一堆的if...else...,現在回頭看以前的程式碼,著實low。但是隻要一心想著進步的人,一定是會總結和反省的,為什麼以前的程式碼出現bug這麼難維護,功能擴充套件那麼難,程式碼難得到複用,過了段時間連自己寫的程式碼都不知道什麼意思。都說女
設計模式(二)簡單工廠模式
簡單工廠模式: 用一個單獨的類來做創造例項的過程。例如加減乘除運算,可以將這些類抽象成一個基類,然後繼承,實現自己的功能,如果有其他的類要建立,只需要新建一個類,在創造例項的類中加一種情況。 類圖: 選自《大話設計模式》 public abstract class Operati
C#設計模式(1)——簡單工廠模式
void 例子 代碼復用 操作 inf 這樣的 man ger troy 1.什麽是簡單工廠 現實中的工廠負責生產產品,編程中的簡單工廠顧名思義就是一個生產對象的類,它的主要作用是封裝改變。我們在平時的工作必不可免的和各種數據庫打交道,我們就以一個數據庫服務類為例來分
設計模式(一)簡單工廠模式
先來考慮一道題目: 請用C++、Java、C#或VB.NET任意一種面嚮物件語言實現一個計算器控制檯程式,要求輸入兩個數和運算子號,得到結果。 題目很簡單,我們腦海裡已經有了初步的思路和答案,寫出來可能是這樣的: class Program { static vo
大話設計模式--(1)簡單工廠模式
實現一個計算器控制檯程式,要求輸入兩個數和運算子號,得到結果。 我的第一反應是和書裡的是一樣的就是向下面這樣寫 /* * 要求輸入兩個數和運算子號,得到結果 * */ public class Test { public static void main(String []args) thr
設計模式(C#)——簡單工廠模式
推薦閱讀: 我的CSDN 我的部落格園 QQ群:704621321 工廠模式主要是為建立物件提供過渡介面
大話設計模式(一)簡單工廠模式
簡單工廠模式就是解決不同場景下例項化物件的問題。 問題場景:做一個簡單的計算器功能,實現加減乘除的功能,要實現這個功能很簡單,但是卻又要使用到面向物件的方法,降低程式的耦合度,符合開閉原則,就沒有想象中那麼簡單,demo如下: 首先建立一個抽象的父類 Calculate,
C# 設計模式(一)簡單工廠模式(unity演示)
目錄 近來打算過一下設計模式那就從簡單工廠模式開始吧。而使用設計模式就是為了提高“可維護”、“可複用”、“可擴充套件”來展開的。工廠模式可分為三類,即:簡單工廠模式、工廠模式和抽象工廠模式。 一、簡單工廠模式 1、簡單工廠模式(S
設計模式-(3)簡單工廠模式(Simple Factory Pattern)
一、引言 在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說, 許多型別物件的創造需要一系列的步驟: 你可能需要計算或取得物件的初始
小白學習JavaScript設計模式(1)——簡單工廠模式
前言 本人也是一名小白,自學進入了前端的這個行業,無論是前端也好,後臺也罷,都離不開敲程式碼。我自己在學習的過程中也做過許多專案,前期主要是為了練習基礎,每個專案的程式碼量比不多。後來到了一個公司實習,這是我第一次出來實習工作,之前一直都是沉浸在自己的自學中,根本不知道自己
設計模式學習筆記(二)--簡單工廠模式和工廠模式
bsp bubuko rac oid nds gen body () pri 老生長談的兩個設計模式了,這裏把這兩個設計模式對比著來總結一下。 什麽是簡單工廠模式? 簡單工廠模式:根據傳入工廠類的參數動態決定要創建哪一個產品類的實例。 UML圖如下(以實現一個計算器為例):
設計模式(2):工廠方法模式
sys 實例化 不同 err reat inter 設計 end 泛型 工廠方法模式: ? 定義: ? 定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方
設計模式(一)—— 簡單工廠
echart 調用 抽象 簡單工廠模式 客戶端 工廠類 info 工具 crete 簡單工廠 簡介 簡單工廠模式屬於創建型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是一個工廠對象決定創建出哪一種
【設計模式】(一)-簡單工廠模式和策略模式
前言 最近開始和春哥,張鐸 ,銀平討論設計模式,成立了一個小菜變大鳥的小組,每天討論一個模式,並且把這個模式搞懂,每學一個新的模式,再回顧一下之前學的模式。這兩天學了簡單工廠模式和策略模式,發現兩個模式有很多相同之處,下面用商場促銷的例子來對兩個模式總結一下。 簡單工廠模式 1.
設計模式學習總結(1)簡單工廠模式、工廠方法模式、抽象工廠模式
設計模式學習 做了幾個專案,發現設計模式的好處還是很多的,這東西就是隻有你真正用到的時候才知道他的好處,否則學了也不知道所以然。所以設計模式學習我認為可以在先進行幾個專案後,再來學習,這樣學習的效果和感受才是最好的。 這次是做一個學習的筆記,內容還是主要以我看的兩本書《大
設計模式(一)——簡單工廠和工廠方法的異同
一、簡單工廠 1.定義: 簡單工廠模式(Simple Factory Pattern):又稱為靜態工廠方法(Static Factory Method)模式。它屬於類建立型模式,在簡單工廠模式中,可以根據引數的不同返回不同型別的例項。簡單工廠模式專門定義一個類來負責建立其他的
設計模式練習(1)——簡單工廠模式
簡單工廠模式 一、題目: 使用簡單工廠模式模擬女媧(Nvwa)造人(Person),如果傳入引數M,則返回一個Man物件,如果傳入引數W。則返回一個物件Woman,用java語言實現該場景。現在需要