設計模式學習-簡單工廠模式


模式概述:

專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類,簡單工廠(Simple Factory)模式又稱為靜態工廠方法(Static Factory Method)模式,屬於類的創建型模式,但其不屬於23種GOF設計模式之一,通常它根據自變量的不同返回不同的類的實例。


UML類圖:


簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建出哪一個產品類的實例。由上圖可以看出,簡單工廠模式有工廠、抽象產品、具體產品三個角色。

  • 工廠角色(Factory) 
    是簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。可被外界直接調用來創建產品對象

  • 抽象產品角色(Product)
    是簡單工廠模式所創建的所有產品對象的父類,它負責描述所有實例所共有的公共接口

  • 具體產品角色(ConcreteProductA及ConcreteProductB)
    是簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例

應用場景: 

光說不練假把式,下面試着用簡單工廠模式代碼實現一個模擬場景

現實生活中大家都習慣刷卡買單,卡的種類很多,VISA、MASTERCARD等等...下面我們寫代碼模擬刷卡處理


首先,我們先將各種各樣的銀行卡抽象出來,實現一個BankCardHandle抽象類,然后每種卡處理實現一個類,並繼承BankCardHandle

View Code 
     abstract  class BankCardHandle 
    {
         public  abstract  void HandleProcess();
    }

     class VisaHandle : BankCardHandle 
    {
         public  override  void HandleProcess()
        {
            Console.WriteLine( " VISA卡處理中 ");
        }
    }

     class MasterCardHandle : BankCardHandle 
    {
         public  override  void HandleProcess()
        {
            Console.WriteLine( " MASTERCARD卡處理中 ");
        }


然后,我們實現工廠角色HandleFactory,定義一個靜態方法生成BankCardHandle的實例

View Code 
     class HandleFactory 
    {
         public  static BankCardHandle CreateBankCardHandle( string type) 
        {
             switch (type.ToUpper())
            {
                 case  " VISA ":
                     return  new VisaHandle();
                 case  " MASTERCARD ":
                     return  new MasterCardHandle();
                 default:
                     return  null;
            }
        }


到這里,三個角色全部定義完成,下面看看客戶端調用的代碼實現

View Code 
        BankCardHandle hd;
        hd = HandleFactory.CreateBankCardHandle( " VISA ");
        hd.HandleProcess();
        hd = HandleFactory.CreateBankCardHandle( " MASTERCARD ");
        hd.HandleProcess();

到此我們模擬的刷卡實現就完成了。


優勢劣勢:

  在簡單工廠模式中,工廠類是整個模式的關鍵,其包含必要的判斷邏輯,能夠根據外界給定的信息,決定究竟創建哪個類的實例,外界可以不用去關注對象的創建,僅需要負責“消費”對象就可以了,明確區分了責任,有利於結構的優化。

  不過,簡單工廠模式的缺點也提現在其工廠類上,該類集中了所有實例的創建邏輯,違反了高內聚的責任分配原則,當系統的具體產品類不斷增多時,工廠類中條件判斷過多,不利於擴展及維護,簡單工廠模式的這些缺點,利用工廠方法模式可以得到一定的克服。

  未完待續.... 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM