天天看點

極速了解設計模式系列:9.工廠方法模式(Factory Method Pattern)

五個角色:産品角色(Product)、真實産品角色(ConcreteProduct)、工廠角色(Creator)、真實工廠角色(ConcreteCreator)、用戶端(Client) 

       産品角色(Product):定義産品接口

       真實産品角色(ConcreteProduct):實作産品的接口形成真實産品

       工廠角色(Creator):聲明工廠的方法并傳回一個的産品

       真實工廠角色(ConcreteCreator):用戶端調用真實工廠傳回一個真實産品

       用戶端(Client):運作并且得到産品

 實作思路:用戶端調用工廠生産相應的産品即可。

 類圖:

<a target="_blank" href="http://blog.51cto.com/attachment/201204/161948235.png"></a>

應用場景:Silverlight中需要建立多種播放器,并且每種播放器專門支援一種格式的檔案(Mp4、圖檔、Flash)。

分析:每種播放器都是一個産品,為每一個産品配置一個工廠,每次用戶端調用對應的工廠生産對應的産品即可。

        下面我們在控制台程式去示範一下如何使用Factory Method Pattern:

        一、 産品角色(Product)

#region 産品角色 

abstract class Player 

    public abstract void Play(); 

#endregion 

        二、真實産品角色(ConcreteProduct)

#region 真實産品角色    class FlashPlayer : Player    {        public override void Play()        {            Console.WriteLine("正在播放Flash檔案");        }    }    class Mp4Player : Player    {        public override void Play()        {            Console.WriteLine("正在播放MP4檔案");        }    }    class PicturePlayer : Player    {        public override void Play()        {            Console.WriteLine("正在播放Picture檔案");        }    }    #endregion 

        三、工廠角色(Creator)

#region 工廠角色 

abstract class PlayerFactory 

    public abstract Player CreatePlayer(); 

        四、真實工廠角色(ConcreteCreator)

#region 真實工廠角色 

 class PicturePlayerFactory : PlayerFactory 

 { 

     public override Player CreatePlayer() 

     { 

         Console.Write("圖檔播放器"); 

         return new PicturePlayer(); 

     } 

 } 

 class Mp4PlayerFactory : PlayerFactory 

         Console.Write("Mp4播放器"); 

         return new Mp4Player(); 

 class FlashPlayerFactory : PlayerFactory 

         Console.Write("Flash播放器"); 

         return new FlashPlayer(); 

 #endregion 

        五、用戶端(Client)

#region 用戶端 

class Program 

    static void Main(string[] args) 

    { 

        //Flash播放器 

        PlayerFactory Factory = new FlashPlayerFactory(); 

        Player player= Factory.CreatePlayer(); 

        player.Play(); 

        //Mp4播放器 

        Factory = new Mp4PlayerFactory(); 

        player = Factory.CreatePlayer(); 

        //Picture播放器 

        Factory = new PicturePlayerFactory(); 

        Console.ReadLine(); 

    } 

#endregion  

本文轉自程興亮 51CTO部落格,原文連結:http://blog.51cto.com/chengxingliang/826994

繼續閱讀