极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)

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

        如需源码请点击 FactoryMethod.rar  下载。

posted @ 2011-09-27 10:17 程兴亮 阅读(...) 评论(...) 编辑 收藏