极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)
2011-09-27 10:17
741 查看
五个角色:产品角色(Product)、真实产品角色(ConcreteProduct)、工厂角色(Creator)、真实工厂角色(ConcreteCreator)、客户端(Client)
产品角色(Product):定义产品接口
真实产品角色(ConcreteProduct):实现产品的接口形成真实产品
工厂角色(Creator):声明工厂的方法并返回一个的产品
真实工厂角色(ConcreteCreator):客户端调用真实工厂返回一个真实产品
客户端(Client):运行并且得到产品
实现思路:客户端调用工厂生产相应的产品即可。
[b] 类图:[/b]
应用场景:Silverlight中需要创建多种播放器,并且每种播放器专门支持一种格式的文件(Mp4、图片、Flash)。
分析:每种播放器都是一个产品,为每一个产品配置一个工厂,每次客户端调用对应的工厂生产对应的产品即可。
下面我们在控制台程序去演示一下如何使用Factory Method Pattern:
一、 产品角色(Product)
二、真实产品角色(ConcreteProduct)
三、工厂角色(Creator)
四、真实工厂角色(ConcreteCreator)
五、客户端(Client)
如需源码请点击 FactoryMethod.rar 下载。
产品角色(Product):定义产品接口
真实产品角色(ConcreteProduct):实现产品的接口形成真实产品
工厂角色(Creator):声明工厂的方法并返回一个的产品
真实工厂角色(ConcreteCreator):客户端调用真实工厂返回一个真实产品
客户端(Client):运行并且得到产品
实现思路:客户端调用工厂生产相应的产品即可。
[b] 类图:[/b]
应用场景: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 下载。
相关文章推荐
- 极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)
- 极速理解设计模式系列:2.工厂方法模式(Factory Method Pattern)
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 设计模式系列(五)工厂方法模式(Factory Method Pattern)
- 极速理解设计模式系列:3.简单工厂模式(Simple Factory Pattern)
- 极速理解设计模式系列:10.抽象工厂模式(Abstract Factory Pattern)
- 极速理解设计模式系列:10.抽象工厂模式(Abstract Factory Pattern)
- 极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)
- 极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)
- 极速理解设计模式系列:4.抽象工厂模式(Abstract Factory Pattern)
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
- 极速理解设计模式系列:2.观察者模式(Observer Pattern)
- 设计模式——工厂方法模式(Factory Method Pattern)
- Net设计模式实例之工厂方法模式( Factory Method Pattern)
- 极速理解设计模式系列:2.观察者模式(Observer Pattern)
- 极速理解设计模式系列
- 极速理解设计模式系列:23.解释器模式(Interpreter Pattern)
- 极速理解设计模式系列:1.建造者模式(Builder Pattern)