抽象工廠(Abstract Factory)

2021-07-05 11:24:53 字數 4610 閱讀 3336

抽象工廠(abstract factory)

抽象工廠,提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。

別名

kit結構

參與者

abstractfactory

——宣告乙個建立抽象產品物件的操作介面。

concretefactory

——實現建立具體產品物件的操作。

abstractproduct

——為一類產品物件宣告乙個介面。

concreteproduct

——定義乙個將被相應的具體工廠建立的產品物件。

——實現abstractproduct介面。

client

——僅使用由abstractfactory和abstractproduct類宣告的介面。

效果

1)它分離了具體的類abstract factory 模式幫助你控制乙個應用建立的物件的類。因為乙個工廠封裝建立產品物件的責任和過程,它將客戶與類的實現分離。客戶通過它們的抽象介面操縱例項。產品的類名也在具體工廠的實現中被分離;它們不出現在客戶**中。

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

3)它有利於產品的一致性

4)難以支援新種類的產品

實現

1)將工廠作為單件

2)建立產品最通常的乙個辦法是為每乙個產品定義乙個工廠方法(factory method),乙個具體的工廠將為每個產品重定義該工廠方法以指定產品。雖然這樣的實現很簡單,但它卻要求每個產品系列都要有乙個新的具體工廠子類,即使這些產品系列的差別很小。如果有多個可能的產品系列,具體工廠也可以使用prototype模式來實現。具體工廠使用產品系列中每乙個產品的原型例項來初始化,且它通過複製它的原型來建立新的產品。在基於原型的方法中,使得不是每個新的產品系列都需要乙個新的具體工廠類。

3)定義可擴充套件的工廠abstractfactory通常為每一種它可以生產的產品定義乙個操作。產品的種類被編碼在操作型構中。增加一種新的產品要求改變abstractfactory的介面以及所有與它相關的類。乙個更靈活但不太安全的設計是給建立物件的操作增加乙個引數。該引數指定了將被建立的物件的種類。它可以是乙個類識別符號、乙個整數、乙個字串,或其他任何可以標識這種產品的東西。

工廠方法

在抽象工廠中使用工廠方法

在使用簡單工廠的地方,可以考慮用

反射技術

來去除switch或if,解除分支判斷帶來的耦

合。抽象工廠(配置檔案)+反射

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.reflection;

using system.configuration;

namespace myabstractfactory2

// return result;

// }

// // public static idepartment createdepartment()

//

// return result;

// }

// }

class dataaccess // 利用反射

public static idepartment createdepartment()}}

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace myabstractfactory2

public class sqlserveruser : iuser

public string getuser(int id)

}public class accessuser : iuser

public string getuser(int id)}}

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace myabstractfactory2

public class sqlserverdepartment : idepartment

public string getdepartment(int id)

}public class accessdepartment : idepartment

public string getdepartment(int id)}}

<?xml version="1.0" encoding="utf-8" ?>

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace myabstractfactory2}}

抽象工廠模式 抽象工廠模式

抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...

工廠模式 抽象工廠

在看抽象工廠前,我們需要引入兩個概念 1 產品等級結構 2 產品族 我們現在有這樣兩個產品型別 汽車 car 自行車 bike 有兩家公司 寶馬 bmw 奧迪 audi 每乙個廠家都能夠生產這兩種型別的產品 bmw介面 bmwcar,bmwbike audi介面 audicar,audibike 在...

工廠模式 抽象工廠

1 為了提高內聚和松耦合,我們經常會抽象出一些類的公共介面以形成抽象基類或者介面。這樣我們可以通過宣告乙個指向基類的指標來指向實際的子類實現,達到了多型的目的。這裡很容易出現的乙個問題是 若干個子類繼承自抽象基類,我們必須在每次要用到子類的地方就寫如 new 的 這裡帶來兩個問題 1 客戶程式設計師...