設計模式 建立型-工廠模式

定義spa

工廠模式是爲建立對象提供接口,以便把建立對象的具體過程隔離起來,封裝變化,提升建立的通用性。.net

 

分類3d

工廠模式包含如下三種分類:代理

  • 簡單工廠
  • 工廠模式
  • 抽象工廠

 

簡單工廠code

簡單工廠又叫靜態工廠方法(Static Factory Method),它是把產品的建立移到統一的工廠方法中去,而不是把產品建立依賴具體產品使用new來建立。對象

 

類圖以下:blog

 

 

 

 

場景:咱們須要生產共享單車,目前市場上有膜拜單車與小黃車兩種產品可供選擇。市場上有家代理生產自行車工廠就叫 SimpleBikeFactory,只要給它單車標籤,他就會按要求生產膜拜單車或小黃車。接口

若是那天要生產小綠車, SimpleBikeFactory 只要調整他中的邏輯,就能夠知足須要了。string

 

  • 代碼
namespace hbb0b0.DesignPattern
{
    /// <summary>
    /// 自行車接口
    /// </summary>
    public interface IBike
    {

    }

    /// <summary>
    /// 膜拜單車
    /// </summary>
    public class MoBike : IBike
    {
        public MoBike()
        {
            Console.WriteLine("MoBike");
        }
    }

    /// <summary>
    /// 小黃車
    /// </summary>
    public class OfOBike : IBike
    {
        public OfOBike()
        {
            Console.WriteLine("OfOBike");
        }
    }

    /// <summary>
    /// 簡單單車生產工廠
    /// </summary>
    public class SimpleBikeFactory
    {
        public static IBike GetBike(string bikeName)
        {
            switch (bikeName)
            {
                case "MO":
                    return new MoBike();
                
                case "OFO":
                    return new OfOBike();
                    
                default:
                    return new MoBike();
                    
            }
        }
    }
}
namespace hbb0b0.DesignPattern.SimpleFactory
{
    /// <summary>
    /// SimpleFactoryApp
    /// </summary>
    public class SimpleFactoryApp : IMain
    {
        public void Test()
        {
            //建立膜拜單車
            IBike moBike = SimpleBikeFactory.GetBike("MO");

            //建立小黃車
            IBike ofoBike = SimpleBikeFactory.GetBike("OFO");
        }
    }
}

 

  • 優勢

原本生產單車的代碼產品

小黃車 OfOBike ofoBike =new OfOBike();

膜拜單車 MoBike moBike = new MoBike();

如今把生產單車對具體單車的依賴移到了靜態工廠方法,封裝了建立單車的變化,避免了建立單車代碼分散到各個地方,便於單車建立邏輯的維護與修改。

 

  • .net 中的使用

 

Encoding 中的 GetEncoding方法就是簡單工廠,它就是根據傳入標識來肯定生成那種Encoding。

 

 

工廠方法模式:

爲建立對象定義一個接口,讓子類來決定哪個類須要進行實例化,工廠模式容許一個類把實例化過程委託給子類。

 

類圖

 

 

 

 

代碼以下:

namespace hbb0b0.DesignPattern.FactoryMethod
{
    /// <summary>
    /// 單車接口
    /// </summary>
    public interface IBike
    {
    }
    /// <summary>
    /// 膜拜單車
    /// </summary>
    public class MoBike:IBike
    {
    }
    /// <summary>
    /// 小黃車
    /// </summary>
    public class OfOBike:IBike
    {
    }

    /// <summary>
    /// 單車工廠接口
    /// </summary>
    public interface IBikeFactory
    {
        /// <summary>
        /// 獲取單車
        /// </summary>
        /// <returns></returns>
        IBike GetBike();
    }
   /// <summary>
    /// 膜拜單車工廠
    /// </summary>
    public class MoBikeFactory : IBikeFactory
    {
        public IBike GetBike()
        {
            return new MoBike();
        }
    }
   /// <summary>
    /// 小黃車工廠
    /// </summary>
    public class OfOBikeFactory : IBikeFactory
    {
        public IBike GetBike()
        {
            return new OfOBike();
        }
    }
}

 

使用

namespace hbb0b0.DesignPattern.AbstractFactory
{
    public class AbstractFactoryApp : IMain
    {
        public void Test()
        {

            //生產膜拜系列產品:單車與電動車
            IBikeFactory moFactory = new MoBikeFactory();
            
            IBike moBike=  moFactory.GetBike();
            IElectricBike moElectric =  moFactory.GetElectricBike();

            //生產小黃車系列產品:單車與電動車
            IBikeFactory ofoFactory = new OfOBikeFactory();
            IBike ofoBike = ofoFactory.GetBike();
            IElectricBike ofoElectric = ofoFactory.GetElectricBike();

        }
    }
}

 

 

.net 使用工廠模式

 

 

 

抽象工廠:

定義爲建立相關或具備依賴關係的對象族提供一個接口,而無需分別爲這些對象指定具體的類。

抽象工廠容許客戶使用抽象的接口來建立一組相關產品,而不須要知道或關心實際生產出的具體產品是什麼。

 

 

 

 

 

代碼

namespace hbb0b0.DesignPattern.AbstractFactory
{
    /// <summary>
    /// 電動車接口
    /// </summary>
    public interface IElectricBike
    {
    }

/// <summary>
    /// 抽象工廠
    /// (提供多種產品)
    /// </summary>
    public interface IBikeFactory
    {
        /// <summary>
        /// 獲取自行車接口
        /// </summary>
        /// <returns></returns>
        IBike GetBike();

        /// <summary>
        /// 獲取電動車接口
        /// </summary>
        /// <returns></returns>
        IElectricBike GetElectricBike();
    }
}
    /// <summary>
    /// 膜拜自行車工廠
    /// </summary>
    public class MoBikeFactory : IBikeFactory
    {
        public IBike GetBike()
        {
            return new MoBike();
        }

        public IElectricBike GetElectricBike()
        {
            return new MoElectricBike();
        }
    }
}
    
    //小黃車自行車工廠
    public class OfOBikeFactory : IBikeFactory
    {
        public IBike GetBike()
        {
            return new OfOBike();
        }

        public IElectricBike GetElectricBike()
        {
            return  new OfOElectricBike();
        }
    }
}

 

 

使用

 

namespace hbb0b0.DesignPattern.AbstractFactory
{
    public class AbstractFactoryApp : IMain
    {
        public void Test()
        {

            //生產膜拜系列產品:單車與電動車
            IBikeFactory moFactory = new MoBikeFactory();
            
            IBike moBike=  moFactory.GetBike();
            IElectricBike moElectric =  moFactory.GetElectricBike();

            //生產小黃車系列產品:單車與電動車
            IBikeFactory ofoFactory = new OfOBikeFactory();
            IBike ofoBike = ofoFactory.GetBike();
            IElectricBike ofoElectric = ofoFactory.GetElectricBike();

        }
    }
}

 

  • .net 應用

 

 

 

三者區別:

簡單工廠模式:是把產品建立統移到統一的工廠方法中去,從而解耦了產品的建立依賴具體的產品。

工廠模式:爲建立對象定義一個接口,而由子類決定產品的建立。對象的建立是在子類中完成。

抽象工廠模式:爲某一系列或具備依賴關係的產品建立定義接口,而不須要分別爲各個產品的建立指定具體的類。工廠模式只提供單一產品,抽象工廠是對工廠模式的升級,抽象工廠是在工廠模式的基礎上提供一系列或具備依賴關係的商品。

相關文章
相關標籤/搜索