五个角色:产品角色(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