設計模式之工廠家族

2021-07-08 20:40:26 字數 3200 閱讀 6546

工廠家族是指建立型模式中的三個名稱很相像的模式,即簡單工廠、工廠方法和抽象工廠模式,鼎鼎大名的工廠家族使我們編寫**更加簡練,更加容易維護、擴充套件和復用,雖然工廠家族們有其各自的優點,但同時侷限性也是不可避免的,下面對三工廠進行乙個簡單的總結。

一、簡單工廠模式

簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項,其實質是由乙個工廠類根據傳入的引數,動態決定應該建立哪乙個產品類(這些產品類繼承自乙個父類或介面)的例項。主要是解決如何去例項化物件的問題,下面以實現計算器功能為例:

namespace 簡單工廠模式

catch (exception ex)}}

//簡單運算工廠類

public class operationfactory

return oper;}}

//operation運算類

public class operation

set

}public double numberb

set

}public virtual double getresult() //定義方法

}//加減乘除類

class operationadd : operation //加法類,繼承運算類

}class operationsub : operation //減法類同加法類

} class operationmul : operation //乘法類同加法類

} class operationdiv : operation //除法類同加法類

}

優點:工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。

缺點:簡單工廠嚴格來說並不算一種設計模式,因為它違反了開放-封閉原則,簡單工廠是通過分支來判斷選擇例項化哪乙個類,如果需求更改,那麼就要更改工廠類了,不僅對擴充套件開放了,對修改也開放了。

二、工廠方法模式

工廠方法模式主要針對的是開放-封閉原則,它定義乙個用於建立物件的藉口,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到其子類。也就是說,在子類中去例項化物件,讓子類做到需要什麼就例項化什麼。還以計算器為例:

關鍵**:

//工廠藉口

inte***ce ifactory

//具體工廠類(減法、乘法、除法同加法類)

class addfactory : ifactory //加法類工廠

}

//客戶端實現

ifactory ope***ctory = new addfactory(); //例項化加法類工廠

operation oper=ope***ctory.createoperation (); //例項化加法運算類

oper.numbera = 1;

oper.numberb = 2;

double result = oper.getresult();

工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,也就是說將簡單工廠的內部邏輯判斷移到了客戶端**來進行,那麼如果增加演算法的話,雖然不用去改工廠類的case分支,但是需要到客戶端去修改了。

工廠方法模式式簡單工廠模式的進一步抽象和推廣,由於使用了多型性,工廠方法模式保持了簡單工廠模式的優點,而且克服了它的缺點。但缺點是由於每加乙個產品,就需要加乙個產品工廠的類,增加了額外的開發量。

三、抽象工廠模式

抽象工廠模式,提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。以資料訪問程式為例,如果資料庫中只有乙個user表,那麼使用簡單工廠模式,定義乙個iuser介面和訪問iuser的工廠介面就可以實現了,但如果再增加乙個department表,那麼就要用抽象工廠模式了,在工廠介面中增加介面方法,也要在工廠類中增加例項化方法。

關鍵**:

//sqlserverdepartment類,用於訪問sql server的department

class sqlserverdepartment : idepartment

public department getdepartment(int id)

}//ifactory介面,定義乙個建立訪問department表物件的抽象的工廠介面

inte***ce ifactory

//sqlserve***ctory類,實現ifactory介面,例項化sqlserveruser和sqlserverdepartment

class sqlserve***ctory : ifactory

public idepartment createdepartment() //增加了sqlserverdepartment工廠

}

優點

1、易於交換產品系列,由於具體工廠類在乙個應用中只需要在初始化的時候出現一次,這就使得改變乙個應用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同的產品配置。

2、讓具體的建立例項過程與客戶端分離,客戶端是通過它們的抽象介面操縱例項,產品的具體類名也被具體工廠的實現分離,不會出現在客戶**中。

缺點:

產品擴充套件非常困難,由於抽象工廠模式解決的是涉及到多個產品系列的問題,那麼再進行產品擴充套件需要進行大批量的改動,所以有時候也要工廠家族的其他族員和反射等方法來對其改進。

小結工廠家族雖然給程式設計帶來了很多好處,各有其優點,但他們也各有其侷限性,都不夠靈活,設計模式的使用不是一成不變必須按套路來的,需要我們在實際情況中配合使用,從而做到物件導向,程式設計是門藝術,隨著學習的不斷深入,相信我們一定會達到爐火純青,隨手寫出優美**的程度的,fighting!!

大話設計模式 工廠模式家族

在工廠模式家族中最出名的是工廠三姐妹,根據抽象的程度不同分為簡單工廠 工廠模式和抽象工廠模式。他們在我們平時的程式設計中會經常使用。所以我們應該詳細地了解一下他們三者之間優缺點。簡單工廠模式又叫做靜態工廠方法 static factorymethod 模式,但不屬於23種gof設計模式之一。簡單工廠...

c 設計模式 之 工廠模式之 工廠模式

1 uml類圖 實現和依賴關係 實現 sportfactory jeepfactory hatchbackfactory 實現 ifactory 介面 sportcar jeepcar hatchbackcar 實現 icar 介面 依賴 ifactory 依賴 icar sportfactory ...

設計模式 設計模式之工廠模式

工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...