設計模式之 工廠模式

2021-08-18 07:44:29 字數 3695 閱讀 6529

工廠模式是建立型模式之一。簡單的說,工廠模式就是為了減少**的工作量,方便測試和擴充套件。在工廠模式中,建立物件時不會對客戶端暴露建立邏輯,並且是通過使用乙個共同的介面來指向新建立的物件。建立工廠類,接收不同的引數生成不同的物件的過程。

由於簡單工廠模式,抽象工廠模式,工廠方法模式依次遞進且很相似,所以放在一起總結。

工廠模式定義乙個用於建立物件的介面,這個介面由子類決定例項話哪乙個類。該模式是乙個類的例項話延遲到了子類。而子類可以重寫介面方法便於建立不同型別的對像

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

優點

1、簡單工廠模式實現了責任分離

2、工廠類中包含了物件生成的必要邏輯判斷,根據客戶端的選擇條件例項化不同的物件,所以客戶端沒有建立物件所需要的條件

3、客戶端不直接建立產品類的物件,客戶端只作為消費者,具體邏輯**交由工廠類處理

缺點

1、工廠類必須知道怎麼樣建立每乙個物件,當增加乙個物件時必須改動工廠類的邏輯**,所以簡單工廠模式不符合開閉原則。

2、因為工廠類中的工廠方法是靜態的,所以工廠類中的方法不能被重寫,工廠類只是乙個單獨的類,它不能成為乙個層次的類

抽象工廠模式(abstract factory pattern):提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。抽象工廠模式又稱為kit模式,屬於物件建立型模式。

優點:

1、更符合開閉原則,增加建立物件時只需要修改相應的產品類和工廠子類

缺點:1、沒有完全符合開閉原則,這是因為在抽象工廠角色中規定了所有可能被建立的產品集合,要支援新種類的產品就意味著要對該介面進行擴 展,而這將涉及到對抽象工廠角色及其所有子類的修改,顯然會帶來較大的不便。

優點:

缺點:簡單工廠模式定義三個角色:

· 

工廠角色

(factory):

負責建立例項的具體邏輯。

· 抽象產品角色(product):是所有建立物件的的父類,擁有所有建立物件的公共介面。

· 具體產品角色(createproduct)具體產品角色是建立目標,所有建立的物件都充當這個角色的某個具體類的例項。

concretefactory:具體工廠

abstractproduct:抽象產品

product:具體產品

concreteproduct:具體產品

factory:抽象工廠

concreteproduct:具體工廠

工廠方法模式

1.工廠角色

public class fruitfactory  else if ("grape".equalsignorecase(name))  else if ("strawberry".equalsignorecase(name))  else }}

2.抽象產品角色

public abstract class fruit
3.具體產品角色

4.客戶端**

public class client  catch (badfruitexception e) }}

1、抽象工廠

abstract class factory
2、具體工廠

//a廠 - 生產模具+容器產品

class factorya extends factory

@override

public product manufacturemould()

}//b廠 - 生產模具+容器產品

class factoryb extends factory

@override

public product manufacturemould()

}

3、抽象產品族

abstract class abstractproduct
4

、抽象產品  

//容器產品抽象類

abstract class containerproduct extends abstractproduct

//模具產品抽象類

abstract class mouldproduct extends abstractproduct

5、具體產品

//容器產品a類

class containerproducta extends containerproduct

}//容器產品b類

class containerproductb extends containerproduct

}//模具產品a類

class mouldproducta extends mouldproduct

}//模具產品b類

class mouldproductb extends mouldproduct

}

6、客戶端

//生產工作流程

public class abstractfactorypattern

}

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

2、客戶端只知道傳入工廠類的引數,對於如何建立物件不關心:客戶端既不需要關心建立細節,甚至連類名都不需要記住,只需要知道型別所對應的引數。

1、乙個系統不要求依賴產品類例項如何被建立、組合和表達的表達,這點也是所有工廠模式應用的前提。

2、這個系統有多個系列產品,而系統中只消費其中某一系列產品

3、系統要求提供乙個產品類的庫,所有產品以同樣的介面出現,客戶端不需要依賴具體實現。

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

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

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

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

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

定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...