.Net 原廠模式(Factory Pattern)

來源:互聯網
上載者:User
目錄
  1. 定義
  2. UML
  3. 參與者
  4. 樣本
定義:

定義一個建立對象的介面,但是讓子類來決定哪個類將被執行個體化。Factory 方法讓一個類執行個體化延遲到子類。

UML:

參與者:

產品(Project)角色:定義一個產品的介面。

具體產品(ConcreteProduct)角色: 實現這個產品角色介面的具體類。

工廠(Factory)角色:定義一個介面,用來建立產品。

具體工廠(ConcreteFactory)角色:實現工廠角色介面的具體類。

 

樣本
代碼using System; namespace DoFactory.GangOfFour.Factory.Structural{  /// <summary>  /// MainApp startup class for Structural  /// Factory Method Design Pattern.  /// </summary>  class MainApp  {    /// <summary>    /// Entry point into console application.    /// </summary>    static void Main()    {      // An array of creators      Creator[] creators = new Creator[2];       creators[0] = new ConcreteCreatorA();      creators[1] = new ConcreteCreatorB();       // Iterate over creators and create products      foreach (Creator creator in creators)      {        Product product = creator.FactoryMethod();        Console.WriteLine("Created {0}",          product.GetType().Name);      }       // Wait for user      Console.ReadKey();    }  }   /// <summary>  /// The 'Product' abstract class  /// </summary>  abstract class Product  {  }   /// <summary>  /// A 'ConcreteProduct' class  /// </summary>  class ConcreteProductA : Product  {  }   /// <summary>  /// A 'ConcreteProduct' class  /// </summary>  class ConcreteProductB : Product  {  }   /// <summary>  /// The 'Creator' abstract class  /// </summary>  abstract class Creator  {    public abstract Product FactoryMethod();  }   /// <summary>  /// A 'ConcreteCreator' class  /// </summary>  class ConcreteCreatorA : Creator  {    public override Product FactoryMethod()    {      return new ConcreteProductA();    }  }   /// <summary>  /// A 'ConcreteCreator' class  /// </summary>  class ConcreteCreatorB : Creator  {    public override Product FactoryMethod()    {      return new ConcreteProductB();    }  }}

Output:

Created ConcreteProductA
Created ConcreteProductB

 

實際運用:
代碼  /// <summary>    /// 產品介面    /// </summary>    public interface ICar    {        void OpenDoor();    } /// <summary>    /// 寶馬車    /// </summary>    public class BaoMaCar : ICar    {        public void OpenDoor()        {            Console.WriteLine("開啟寶馬車門");        }    }    /// <summary>    /// 奧迪車    /// </summary>    public class AodiCar : ICar    {        public void OpenDoor()        {            Console.WriteLine("開啟奧迪車門");        }    }/// <summary>    /// 工廠介面,用來建立哪個車    /// </summary>    public interface IFactory    {        ICar Create();    }/// <summary>    /// 寶馬工廠    /// </summary>    public class BaoMaFactory : IFactory    {        public ICar Create()        {            return new BaoMaCar();        }    }    /// <summary>    /// 奧迪工廠    /// </summary>    public class AoDiFactory : IFactory    {        public ICar Create()        {            return new AodiCar();        }    }  static void Main(string[] args)        {            IFactory factory = new AoDiFactory();            ICar car = factory.Create();            car.OpenDoor();            Console.Read();        }

OutPut:

開啟奧迪車門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.