引言
抽象工廠模式一種創建型設計模式,它提供了一種方式來封裝一組具有相同主題的工廠,而不必指定它們具體的類,這樣,客戶端代碼就可以使用抽象工廠來創建一組相關的物件,而不必關心實際創建的具體類,
抽象工廠模式有以下幾個主要角色:
-
抽象工廠(AbstractFactory):宣告用于創建抽象產品的操作的介面,
-
工廠實作(ConcreteFactory):實作創建具體產品物件的操作,
-
抽象產品(AbstractProduct):宣告產品物件型別的介面,
-
產品實作(Product):定義由相應的具體工廠創建的產品物件,實作AbstractProduct介面,
下面使用C#實作抽象工廠模式:
抽象工廠
定義一個抽象工廠介面,其中包含了創建不同產品的方法:
public interface IAbstractFactory
{
IProductA CreateProductA();
IProductB CreateProductB();
}
工廠實作
定義具體的工廠類,實作抽象工廠介面:
public class ConcreteFactory1 : IAbstractFactory
{
public IProductA CreateProductA()
{
return new ConcreteProductA1();
}
public IProductB CreateProductB()
{
return new ConcreteProductB1();
}
}
public class ConcreteFactory2 : IAbstractFactory
{
public IProductA CreateProductA()
{
return new ConcreteProductA2();
}
public IProductB CreateProductB()
{
return new ConcreteProductB2();
}
}
在上述示例中,我們定義了兩個具體工廠類:ConcreteFactory1和ConcreteFactory2,這兩個工廠類都實作了IAbstractFactory介面,并且分別提供了不同的產品實作,
抽象產品
public interface IProductA
{
string GetName();
}
產品實作
public class ConcreteProductA1 : IProductA
{
public string GetName()
{
return "ProductA1";
}
}
public class ConcreteProductA2 : IProductA
{
public string GetName()
{
return "ProductA2";
}
}
public interface IProductB
{
string GetName();
}
public class ConcreteProductB1 : IProductB
{
public string GetName()
{
return "ProductB1";
}
}
public class ConcreteProductB2 : IProductB
{
public string GetName()
{
return "ProductB2";
}
}
下面,我們可以使用抽象工廠來創建一組相關的物件:
public class Client
{
private IAbstractFactory factory;
public Client(IAbstractFactory factory)
{
this.factory = factory;
}
public void Run()
{
var productA = factory.CreateProductA();
var productB = factory.CreateProductB();
Console.WriteLine(productA.GetName());
Console.WriteLine(productB.GetName());
}
}
static void Main(string[] args)
{
var client1 = new Client(new ConcreteFactory1());
client1.Run();
var client2 = new Client(new ConcreteFactory2());
client2.Run();
}
輸出:
ProductA1
ProductB1
ProductA2
ProductB2
總結
上面的示例中,我們使用抽象工廠模式來創建了一組相關的物件,但是需要注意的是,它適用于創建一組相關的產品物件,但是當產品族的變化引起整個工廠等級結構的變化時,抽象工廠模式就不適用了,
此外,抽象工廠模式還存在一些缺點,例如:
-
新增產品會導致工廠介面的擴展,如果需要新增產品,就需要修改所有的工廠類,這會帶來一些不必要的麻煩,
-
可能會導致類層次結構的復雜度增加,如果有多個產品族,就需要定義多個工廠介面,這會增加類層次結構的復雜度,
因此,在使用抽象工廠模式時,需要根據具體情況進行權衡和選擇,
作者: Peter.Pan
出處: https://www.cnblogs.com/pandefu/>
關于作者:.Net Framework,.Net Core ,WindowsForm,WPF ,控制元件庫,多執行緒
本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出 原文鏈接,否則保留追究法律責任的權利, 如有問題, 可郵件咨詢,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/556889.html
標籤:設計模式
上一篇:讀發布!設計與部署穩定的分布式系統(第2版)筆記22_實體層之日志
下一篇:返回列表
