五个角色:产品角色(Product)、真实产品角色(ConcreteProduct)、工厂角色(Creator)、真实工厂角色(ConcreteCreator)、客户端(Client)
产品角色(Product):定义产品接口
真实产品角色(ConcreteProduct):实现产品的接口形成真实产品
工厂角色(Creator):声明工厂的方法并返回一个的产品
真实工厂角色(ConcreteCreator):客户端调用真实工厂返回一个真实产品
客户端(Client):运行并且得到产品
实现思路:客户端调用工厂生产相应的产品即可。
类图:
应用场景: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();
}
#endregion
四、真实工厂角色(ConcreteCreator)
#region 真实工厂角色
class PicturePlayerFactory : PlayerFactory
{
public override Player CreatePlayer()
{
Console.Write("图片播放器");
return new PicturePlayer();
}
}
class Mp4PlayerFactory : PlayerFactory
{
public override Player CreatePlayer()
{
Console.Write("Mp4播放器");
return new Mp4Player();
}
}
class FlashPlayerFactory : PlayerFactory
{
public override Player CreatePlayer()
{
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();
player.Play();
//Picture播放器
Factory = new PicturePlayerFactory();
player = Factory.CreatePlayer();
player.Play();
Console.ReadLine();
}
}
#endregion