Factory 方法(Factory Method)模式

來源:互聯網
上載者:User
//--> 
加入收藏

聯絡我們

網站搜尋
//-->首頁 另類生活 .NET技術 資料庫技術 JavaScript技術 網頁設計相關 技術專題 項目體系 部落格 網站論壇
 
  放心去飛 → 項目體系 → 軟體方法學 → 設計模式

Factory 方法(Factory Method)模式
作者:呂震宇
一、 Factory 方法(Factory Method)模式

Factory 方法(FactoryMethod)模式是類的建立模式,其用意是定義一個建立產品對象的工廠介面,將實際建立工作延遲到子類中。

Factory 方法模式是簡單原廠模式的進一步抽象和推廣。由於使用了多態性,Factory 方法模式保持了簡單原廠模式的優點,而且克服了它的缺點。

在Factory 方法模式中,核心的工廠類不再負責所有產品的建立,而是將具體建立工作交給子類去做。這個核心類僅僅負責給出具體工廠必須實現的介面,而不接觸哪一個產品類被執行個體化這種細節。這使得Factory 方法模式可以允許系統在不修改工廠角色的情況下引進新產品。

在Factory Method模式中,工廠類與產品類往往具有平行的等級結構,它們之間一一對應。


二、 Factory Method模式角色與結構:


抽象工廠(Creator)角色:是Factory 方法模式的核心,與應用程式無關。任何在模式中建立的對象的工廠類必須實現這個介面。

具體工廠(Concrete Creator)角色:這是實現抽象工廠介面的具體工廠類,包含與應用程式密切相關的邏輯,並且受到應用程式調用以建立產品對象。在上圖中有兩個這樣的角色:BulbCreator與TubeCreator。

抽象產品(Product)角色:Factory 方法模式所建立的對象的超類型,也就是產品對象的共同父類或共同擁有的介面。在上圖中,這個角色是Light。

具體產品(Concrete Product)角色:這個角色實現了抽象產品角色所定義的介面。某具體產品有專門的具體工廠建立,它們之間往往一一對應。


三、 程式舉例: using  System;

public   abstract     class  Light
{
   public abstract void TurnOn();
   public abstract void TurnOff();
}

public   class  BulbLight : Light
{
   public override void TurnOn()
   { Console.WriteLine("Bulb Light is Turned on"); }

   public override void TurnOff()
   { Console.WriteLine("Bulb Light is Turned off"); }
}

public   class  TubeLight : Light
{
   public override void TurnOn()
   { Console.WriteLine("Tube Light is Turned on"); }

   public override void TurnOff()
   { Console.WriteLine("Tube Light is Turned off"); }
}

public   abstract     class  Creator
{
   public abstract Light factory();
}

public   class  BulbCreator : Creator
{
   public override Light factory()
   { return new BulbLight(); }
}

public   class  TubeCreator : Creator
{
   public override Light factory()
   { return new TubeLight(); }
}

public   class  Client
{
   public static void Main()
   {
      Creator c1 = new BulbCreator();
      Creator c2 = new TubeCreator();

      Light l1 = c1.factory();
      Light l2 = c2.factory();

      l1.TurnOn();
      l1.TurnOff();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.