五個角色:産品角色(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