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

转载于:https://www.cnblogs.com/chengxingliang/archive/2011/09/27/2189463.html

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

  1. 设计模式之六:工厂方法模式(Factory method Pattern)

    工厂方法(Factory Method)模式就是定义一个创建对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责具体产品的创建,仅提供了具体工厂子类必须实现的接口,这样核心类成为一个抽象 ...

  2. 【设计模式】工厂方法模式 Factory Method Pattern

    在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...

  3. 设计模式之工厂方法模式(Factory Method Pattern)

    一.工厂方法模式的诞生 在读这篇文章之前,我先推荐大家读<设计模式之简单工厂模式(Simple Factory Pattern)>这篇文档.工厂方法模式是针对简单工厂模式中违反开闭原则的不 ...

  4. 软件工程 - 设计模式学习之工厂方法模式Factory Method

    在现实生活中我们可以看见,乐事在卖薯片,可比克也在卖. 我敢肯定的说它们各自都有自己的工厂来生产薯片,而且生产出来的薯片味道还是不一样的. 这就是我们这里所谓的工厂方法模式. 我们来看看这个模式的UM ...

  5. C++实现工厂方法模式Factory Method Pattern

    设计原则6:要依赖抽象,不要依赖具体类.(又称依赖倒置原则Dependency Inversion Principle) 不能让高层组件依赖低层组件,而且,不管高层组件或低层组件,两者都应该依赖于抽象 ...

  6. 工厂方法模式(Factory Method)简介

    工厂方法模式 名字 跟已经介绍的 简单工厂模式很类似. 实际上它们的模型也是十分相似的. 我们先看看工厂模式的定义. 一. 工厂方法(Factory Method)模式定义 教材上是这样写的: 工厂方 ...

  7. 设计模式系列之 工厂方法模式

    定义 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行. 该定义是对生产者一方的描述,涉及四种角色,包括接口.接口实现类.被实例化的类.抽象产品(隐 ...

  8. 设计模式之工厂方法模式(Factory Method)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  9. 设计模式之工厂方法模式---factory method

    模式的介绍 模式的定义 Define an interface for creating an object,but let subclassed decide which class to inst ...

最新文章

  1. 一文梳理2019年腾讯广告算法大赛冠军方案
  2. grunt使用watch和livereload的Gruntfile.js的配置
  3. 解决 NDK is missing a “platforms“ directory.
  4. 从入门到入土:Nessus出击:使用nessus扫描某台靶机
  5. Using mysqldump for Backups(备份还原数据库实例及参数详细说明)
  6. C语言程序的内在分配:堆和栈以及char a[]和char*的区别
  7. ES6学习笔记(对象)
  8. 套用这套模板,玩转周报、月报、年报更省事
  9. 普鸥知识产权|如何申请美国外观专利?申请费用、时间、流程?
  10. ubuntu 拷贝文件夹下所有文件到其他文件夹操作
  11. FMI飞马网 | 在人工智能时代,如何更好地发挥大数据的价值?
  12. 如何做一个2D 横版过关类游戏
  13. HEVC中打印CU划分
  14. vivado IP核知识点学习
  15. 编译小米2s CyanogenMod 版本遇到的几个问题
  16. java程序设计模拟题_《Java程序设计》东师模拟题题目及答案
  17. 如何用快启动pe修复win10系统引导?
  18. 路由器备份文件查看 Android,【教程】用安卓系统 手机查看路由U盘内容的方法...
  19. 取得股票市值和所属行业
  20. 离散傅里叶(DFT) 与 快速傅里叶(FFT)

热门文章

  1. python下什么-python官网下的包是干什么用的?
  2. python语言能干什么-python语言都可以做什么
  3. python装饰器原理-Python 装饰器工作原理解析
  4. python微控制器编程从零开始-Python微控制器编程从零开始 使用MicroPython
  5. python手册中文版apk-Go、Python 语言解析安卓 APK 包
  6. python零基础有用吗-python零基础入门后的尴尬怎么解决?
  7. python免费试听-哈尔滨Python人工智能课程免费试听
  8. python读取中文txt文本-python中使用txt文本保存和读取变量
  9. python3创建定时任务
  10. mybatis之ResultMap