一、工廠方法模式簡介(Brief Introduction)
工廠方法模式(Factory Method Pattern),定義一個用於創建對象的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類中。
二、解決的問題(What To Solve)
工廠方法模式較簡單工廠模式,修改時關閉的,擴展時開放的,完全符合開放-封閉原則。工廠方法使一個類的實例化延遲到其子類中。
三、工廠方法模式分析(Analysis)
1、工廠方法模式結構
Product抽象類,定義工廠方法所創建的對象接口。
ConcreteProduct實現類,具體的產品,實現Product接口。
Factory抽象類,聲明工廠方法,該方法返回一個Product類型的對象。
ConcreteFactory類,抽象工廠類Factory的具體實現,返回一個ConcreteProduct實例
四.實例分析(Example)
1、場景
一個簡單計算器,具有簡單的加操作和減操作。結構如下圖所示
Factory:抽象工廠方法類.
AddFactory:加法工廠
SubFactory,減法工廠.
Operation:抽象操作類
AddOperation:加法操作
SubOperation:減法操作
2、代碼
1、抽象操作類Operation,及其具體實現類AddOperation、SubOperation |
/// <summary>
/// 抽象操作類
/// </summary>
public abstract class Operation
{
public int numberA;
public int numberB;
public abstract int GetResult();
}
/// <summary>
/// 加法操作
/// </summary>
public class AddOperation : Operation
{
public override int GetResult()
{
return (this.numberA + this.numberB);
}
}
/// <summary>
/// 減法操作
/// </summary>
public class SubOperation : Operation
{
public override int GetResult()
{
return (this.numberA - this.numberB);
}
} |
2、抽象工廠類Factory及其具體工廠類AddFactory、SubFactory |
public abstract class Factory
{
public abstract Operation CreateOperation();
}
public class AddFactory : Factory
{
public override Operation CreateOperation()
{
return new AddOperation();
}
}
public class SubFactory:Factory
{
public override Operation CreateOperation()
{
return new SubOperation();
}
} |
3、客戶端代碼 |
static void
{
Console.WriteLine("使用工廠方法進行計算");
Factory factory1 = new AddFactory();
Operation operation1= factory1.CreateOperation();
operation1.numberA = 10;
operation1.numberB = 20;
Console.WriteLine("{0}+{1}={2}", operation1.numberA, operation1.numberB, operation1.GetResult());
Factory factory2 = new SubFactory();
Operation operation2 = factory2.CreateOperation();
operation2.numberA = 10;
operation2.numberB = 20;
Console.WriteLine("{0}+{1}={2}", operation2.numberA, operation2.numberB, operation2.GetResult());
Console.Read();
} |
3、實例運行結果
五、總結(Summary)
本文對工廠方法模式(Factory Method Pattern)的概念及其設計結構圖簡單地進行了描述,同樣也以一個計算器的實例進行了說明,工廠方法模式較簡單工廠模式,修改時關閉的,擴展時開放的,完全符合開放-封閉原則.