天天看点

极速理解设计模式系列: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

继续阅读