一、概述
在軟件開發中,常常會需要創建一系列相互依賴的對象,同時,由於需求的變化,往往存在較多系列對象的創建工作。如果采用常規的創建方法(new),會造成客戶程序和對象創建工作的緊耦合。對此,抽象工廠模式提供了一種解耦手段。
二、抽象工廠模式
抽象工廠模式提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。
抽象工廠模式的結構圖如下:
AbstractFactory聲明了一個創建抽象產品對象的操作接口。
ConcreteFactory實現了創建具體產品對象的操作。
AbstractProduct為一類產品對象聲明一個接口。
ConcreteProduct實現AbstractProduct接口,定義一個將被相應的具體工廠創建的產品對象。
Client使用AbstractFactory和AbstractProduct聲明的接口。
三、示例
我們以實現一個汽車工程為例來看一個簡單的抽象工廠的例子。
首先定義抽象工廠
1 public abstract class CarFactory
2 {
3 public abstract void CreateWindows();
4 public abstract void CreateWheels();
5 }
接着實現兩個具體的汽車工廠
1 public class BenzFactory : CarFactory
2 {
3 public override void CreateWindows()
4 {
5 Console.WriteLine("Create Benz Windows");
6 }
7
8 public override void CreateWheels()
9 {
10 Console.WriteLine("Create Benz Wheels");
11 }
12 }
13 public class BMWFactory : CarFactory
14 {
15 public override void CreateWindows()
16 {
17 Console.WriteLine("Create BMW Windows");
18 }
19
20 public override void CreateWheels()
21 {
22 Console.WriteLine("Create BMW Wheels");
23 }
24 }
最后看一下如何調用
1 static void Main(string[] args)
2 {
3 CarFactory carFactory = new BenzFactory();
4 carFactory.CreateWindows();
5 carFactory.CreateWheels();
6
7 Console.WriteLine("Change Factory To BMWFactory");
8 carFactory = new BMWFactory();
9 carFactory.CreateWindows();
10 carFactory.CreateWheels();
11
12 Console.ReadLine();
13 }
抽象工廠模式在實際應用中比較廣泛,我們可以通過依賴注入的方式傳遞抽象工廠,並利用反射讀取配置文件中關於具體工廠的信息,達到在不修改代碼的情況下改變實際產品的目的。