极速理解设计模式系列: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 下载。
转载于:https://www.cnblogs.com/chengxingliang/archive/2011/09/27/2189463.html
极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)相关推荐
- 设计模式之六:工厂方法模式(Factory method Pattern)
工厂方法(Factory Method)模式就是定义一个创建对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责具体产品的创建,仅提供了具体工厂子类必须实现的接口,这样核心类成为一个抽象 ...
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- 设计模式之工厂方法模式(Factory Method Pattern)
一.工厂方法模式的诞生 在读这篇文章之前,我先推荐大家读<设计模式之简单工厂模式(Simple Factory Pattern)>这篇文档.工厂方法模式是针对简单工厂模式中违反开闭原则的不 ...
- 软件工程 - 设计模式学习之工厂方法模式Factory Method
在现实生活中我们可以看见,乐事在卖薯片,可比克也在卖. 我敢肯定的说它们各自都有自己的工厂来生产薯片,而且生产出来的薯片味道还是不一样的. 这就是我们这里所谓的工厂方法模式. 我们来看看这个模式的UM ...
- C++实现工厂方法模式Factory Method Pattern
设计原则6:要依赖抽象,不要依赖具体类.(又称依赖倒置原则Dependency Inversion Principle) 不能让高层组件依赖低层组件,而且,不管高层组件或低层组件,两者都应该依赖于抽象 ...
- 工厂方法模式(Factory Method)简介
工厂方法模式 名字 跟已经介绍的 简单工厂模式很类似. 实际上它们的模型也是十分相似的. 我们先看看工厂模式的定义. 一. 工厂方法(Factory Method)模式定义 教材上是这样写的: 工厂方 ...
- 设计模式系列之 工厂方法模式
定义 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行. 该定义是对生产者一方的描述,涉及四种角色,包括接口.接口实现类.被实例化的类.抽象产品(隐 ...
- 设计模式之工厂方法模式(Factory Method)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...
- 设计模式之工厂方法模式---factory method
模式的介绍 模式的定义 Define an interface for creating an object,but let subclassed decide which class to inst ...
最新文章
- 一文梳理2019年腾讯广告算法大赛冠军方案
- grunt使用watch和livereload的Gruntfile.js的配置
- 解决 NDK is missing a “platforms“ directory.
- 从入门到入土:Nessus出击:使用nessus扫描某台靶机
- Using mysqldump for Backups(备份还原数据库实例及参数详细说明)
- C语言程序的内在分配:堆和栈以及char a[]和char*的区别
- ES6学习笔记(对象)
- 套用这套模板,玩转周报、月报、年报更省事
- 普鸥知识产权|如何申请美国外观专利?申请费用、时间、流程?
- ubuntu 拷贝文件夹下所有文件到其他文件夹操作
- FMI飞马网 | 在人工智能时代,如何更好地发挥大数据的价值?
- 如何做一个2D 横版过关类游戏
- HEVC中打印CU划分
- vivado IP核知识点学习
- 编译小米2s CyanogenMod 版本遇到的几个问题
- java程序设计模拟题_《Java程序设计》东师模拟题题目及答案
- 如何用快启动pe修复win10系统引导?
- 路由器备份文件查看 Android,【教程】用安卓系统 手机查看路由U盘内容的方法...
- 取得股票市值和所属行业
- 离散傅里叶(DFT) 与 快速傅里叶(FFT)
热门文章
- python下什么-python官网下的包是干什么用的?
- python语言能干什么-python语言都可以做什么
- python装饰器原理-Python 装饰器工作原理解析
- python微控制器编程从零开始-Python微控制器编程从零开始 使用MicroPython
- python手册中文版apk-Go、Python 语言解析安卓 APK 包
- python零基础有用吗-python零基础入门后的尴尬怎么解决?
- python免费试听-哈尔滨Python人工智能课程免费试听
- python读取中文txt文本-python中使用txt文本保存和读取变量
- python3创建定时任务
- mybatis之ResultMap