[導讀]
[設計模式整理筆記 一] 基礎知識
[設計模式整理筆記 二] 簡單原廠模式(Simple Factory)
[設計模式整理筆記 三] 原廠模式(Factory)
[設計模式整理筆記 四] 抽象原廠模式(Abstract Factory)
[設計模式整理筆記 五] 建立者模式(Builder)
[設計模式整理筆記 六] 原廠模式與建立者模式總結
[設計模式整理筆記 七] 原型模式(ProtoType)
[設計模式整理筆記 八] 單例模式(Singleton)
[設計模式整理筆記 九] 面板模式(Facade)
....後續, 包括部分例子
[/導讀]
在簡單原廠模式裡面,我們只需編寫一個工廠類專門來執行個體化你需要的類。在原廠模式中, 我們系統中有幾個不同的產品, 我們就寫幾個對應的工廠類來進行生產,等於現在的車間, 不是車間執行個體化不同的類, 就是某些產品極為相近,都需要寫二個工廠類來生產並返回你需要的類。抽象原廠模式中,我們會把一系列相似的產品放在一個工廠類裡面執行個體化,和現在車間的流水線差不多,一個流水線負責生產相似的產品, 不同的產品需要另一條流水線來生產。原廠模式是針對細微的產品來創工廠類, 像個人實得工資計算過程中, 還需要計算稅, 基金等操作, 如果用原廠模式來設計,那會變得好複雜, 那麼怎樣才能設計出更好的方式來處理這個問題呢? 下面就用建立者模式來介紹,具體介紹深圳子公司計算的全過程:
既然是深圳子公司,那就先建立這個子公司的類先:
代碼
using System;
namespace ConsoleApp
{
public class ShenZhenCompany
{
public virtual void CommandSalary()
{
Console.WriteLine("這是深圳子公司系統計算的結果");
}
}
}
既然要進行三個流程的計算,下面定義三個計算的類, 分別是工資,稅,基金:
工資部分:
代碼
//定義介面方法
namespace ConsoleApp
{
public interface ISalary
{
void CommandSalary();
}
}
//定義類
namespace ConsoleApp
{
public class ShenZhenSalary : ISalary
{
public virtual void CommandSalary()
{
Console.WriteLine("這是深圳子公司的工資計算模組");
}
}
}
稅定義如下:
代碼
//定義介面方法
namespace ConsoleApp
{
public interface ITax
{
void CommandTax();
}
}
//定義類
namespace ConsoleApp
{
public class ShenZhenTax: ITax
{
public void CommandTax()
{
Console.WriteLine("這是深圳子公司的扣稅計算模組");
}
}
}
基金定義如下:
代碼
//定義介面如下
namespace ConsoleApp
{
public interface IFund
{
void CommandFund();
}
}
//定義類
namespace ConsoleApp
{
public class ShenZhenFund : IFund
{
public void CommandFund()
{
Console.WriteLine("這是深圳子公司的基金計算模組");
}
}
}
到這裡基本上的類都定義完成, 一般的時候, 我們需要用時直接執行個體化就可以了, 然而你知道設計一個好的調用方法會協助日後更好維護,相信也不會要用的時候直接執行個體化一個對象了。先定義一個抽象工廠類(IFactory)
namespace ConsoleApp
{
public interface IFactory
{
ISalary CreateSalary();
ITax CreateTax();
IFund CreateFund(); }
}
那現在就可以建立一個類, 這個是派生於IFactory的, 我定義其名為ShenZhenFactory,在這個類裡面, 是返回三個操作流程的類:
代碼
namespace ConsoleApp
{
public class ShenZhenFactory : IFactory
{
public ISalary CreateSalary()
{
return new ShenZhenSalary();
}
public ITax CreateTax()
{
return new ShenZhenTax();
}
public IFund CreateFund()
{
return new ShenZhenFund();
}
}
}
到這裡你就知道這個類的作用了吧, 每一個對應的方法返回對應的類, 那麼我們只需要再建立一個類的對他們進行組裝就可以了。用戶端不需要再需要各種過程,所有的過程都封裝在相應的類裡面,職責十分明了。
代碼
namespace ConsoleApp
{
public class Director
{
private IFactory Factory;
public Director(IFactory Factory)
{
this.Factory = Factory;
}
public ShenZhenCompany AssembleShenZhenCompany()
{
ISalary Salary = Factory.CreateSalary();
Salary.CommandSalary(); //工資計算
ITax Tax = Factory.CreateTax();
Tax.CommandTax(); //稅計算
IFund Fund = Factory.CreateFund();
Fund.CommandFund(); //計算基金
return new ShenZhenCompany();
}
}
}
整個流程都在我們的掌控之中了, 下面就是調用了,代碼如下:
代碼
namespace ConsoleApp
{
class Program
{
public static void Main(string[] args)
{
Director MyDirector = new Director(new ShenZhenFactory());
ShenZhenCompany SZCompany = MyDirector.AssembleShenZhenCompany();
Console.ReadLine();
}
}
}
運行就會輸出:
這是深圳子公司的工資計算模組
這是深圳子公司的扣稅計算模組
這是深圳子公司的基金計算模組
到這裡為止, 一個完整的流程出來了, 當然你可以按工資計算模組那樣, 用原廠模式把扣稅或基金模組的代碼也寫出來,當練習一下, 現在知道什麼時候應該用原廠模式,什麼時候用建立者模式了吧! 後面一章, 會用好典型的例子來講解一下簡單原廠模式,原廠模式,抽象原廠模式,建立者模式的特點。 保證你一看完就印象深刻。