一、工廠方法模式簡介(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 Main(string[] args) { 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)的概念及其設計結構圖簡單地進行了描述,同樣也以一個計算器的實例進行了說明,工廠方法模式較簡單工廠模式,修改時關閉的,擴展時開放的,完全符合開放-封閉原則.簡單工廠模式下,當計算器需要增加除法的時候,我們首先要增加除法運算子類,然後還要修改工廠代碼,增加case分支,這就違背了封閉的原則,當用工廠方法增加除法運算時,我們只要增加除法工廠和除法運算類就行了,不必修改抽象工廠方法!完全符合開放-封閉原則。