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

  • 相关阅读:
    利用Javascript制作网页特效(其他常见特效)
    利用Javascript制作网页特效(窗口特效)
    利用Javascript制作网页特效(图像特效)
    利用Javascript制作网页特效(时间特效)
    Javascript的事件
    js部分知识整理,google浏览器的代码调试
    前端之页面布局
    使用 html5 svg 绘制图形
    写了placement new也要写placement delete
    CxAudit 提升安全分析
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2189463.html
Copyright © 2020-2023  润新知