設計模式 簡單工廠

2021-08-08 11:48:30 字數 2765 閱讀 7468

簡單工廠模式(****** factory pattern):定義乙個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。因為在簡單工廠模式中用於建立例項的方法是靜態(static)方法,因此簡單工廠模式又被稱為靜態工廠方法(static factory method)模式,它屬於類建立型模式。

首先將需要建立的各種不同物件(例如各種不同的運算物件)的相關**封裝到不同的類中,這些類稱為具體產品類,而將它們公共的**進行抽象和提取後封裝在乙個抽象產品類中,每乙個具體產品類都是抽象產品類的子類;然後提供乙個工廠類用於建立各種產品,在工廠類中提供乙個建立產品的工廠方法,該方法可以根據所傳入的引數不同建立不同的具體產品物件;客戶端只需呼叫工廠類的工廠方法並傳入相應的引數即可得到乙個產品物件。

簡單工廠模式的要點在於:當你需要什麼,只需要傳入乙個正確的引數,就可以獲取你所需要的物件,而無須知道其建立細節。簡單工廠模式結構比較簡單,其核心是工廠類的設計,其結構如圖1所示:

factory(工廠角色):工廠角色即工廠類,它是簡單工廠模式的核心,負責實現建立所有產品例項的內部邏輯;客戶端可以通過工廠類來建立產品,在簡單工廠模式中,工廠類提供了乙個靜態工廠方法供客戶端使用,根據所傳入的引數不同可以建立不同的產品物件,典型的工廠類**如下所示(以實現計算機運算為例):

/// /// 運算類工廠

///

public class operationfactory

case "-":

case "*":

case "/":

case "sqr":

case "sqrt":

case "+/-":

}return oper;}}

product(抽象產品角色):

它是工廠類所建立的所有物件的父類,封裝了各種產品物件的公有方法,它的引入將提高系統的靈活性,使得在工廠類中只需定義乙個通用的工廠方法,因為所有建立的具體產品物件都是其子類物件。

/// /// 運算類

///

public class operation

set}

/// /// 數字b

///

public double numberb

set}

/// /// 得到運算結果

///

///

public virtual double getresult()

concreteproduct(具體產品角色):它是簡單工廠模式的建立目標,所有被建立的物件都充當這個角色的某個具體類的例項。每乙個具體產品角色都繼承了抽象產品角色,需要實現在抽象產品中宣告的抽象方法。

/// /// 加法類

///

class operationadd : operation

}/// /// 減法類

///

class operationsub : operation

}/// /// 乘法類

///

class operationmul : operation

}/// /// 除法類

///

class operationdiv : operation

}

在客戶端**中,我們通過呼叫工廠類的工廠方法即可得到產品物件,**如下所示:

class program

catch (exception ex)}}

優點(1) 工廠類包含必要的判斷邏輯,可以決定在什麼時候建立哪乙個產品類的例項,客戶端可以免除直接建立產品物件的職責,而僅僅「消費」產品,簡單工廠模式實現了物件建立和使用的分離。

(2) 客戶端無須知道所建立的具體產品類的類名,只需要知道具體產品類所對應的引數即可,對於一些複雜的類名,通過簡單工廠模式可以在一定程度減少使用者的記憶量。

缺點

(1) 由於工廠類集中了所有產品的建立邏輯,職責過重,一旦不能正常工作,整個系統都要受到影響。

(2) 使用簡單工廠模式勢必會增加系統中類的個數(引入了新的工廠類),增加了系統的複雜度和理解難度。

(3) 系統擴充套件困難,一旦新增新產品就不得不修改工廠邏輯,在產品型別較多時,有可能造成工廠邏輯過於複雜,不利於系統的擴充套件和維護。

(4) 簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。

適用場景

(1) 工廠類負責建立的物件比較少,由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。

(2) 客戶端只知道傳入工廠類的引數,對於如何建立物件並不關心。

工廠模式是最常用的一類建立型設計模式,通常我們所說的工廠模式是指工廠方法模式,它也是使用頻率最高的工廠模式。本章將要學習的簡單工廠模式是工廠方法模式的「小弟」,它不屬於gof 23種設計模式,但在軟體開發中應用也較為頻繁,通常將它作為學習其他工廠模式的入門。此外,工廠方法模式還有一位「大哥」——抽象工廠模式。這三種工廠模式各具特色,難度也逐個加大,在軟體開發中它們都得到了廣泛的應用,成為物件導向軟體中常用的建立物件的工具。

設計模式 工廠模式(簡單工廠)

一 簡單工廠 定義 簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。特點 工廠類直接實現,乙個產品介面,乙個工廠類可以產生多...

簡單工廠設計模式與工廠設計模式

工廠設計模式的目的 降低呼叫者和實現者之間的耦合度。當需求發生變化 增加或改變 時,不改變原有 的結構。1.簡單工廠設計模式 優點 降低了呼叫者和實現者之間的耦合度。當引入乙個新的實現型別時,只需要增加乙個實現類,然後修改工廠類即可。缺點 只適用於層次結構較為簡單的情況。如果可能的實現型別很多,工廠...

設計模式 簡單工廠設計模式

請用任意一種物件導向語言實現計算器控制台程式,要求輸入兩個數和運算符號,得到結果。operation運算類 public class operation set public double numberb set public virtual double getresult 加減乘除類 using...