首页 / C# / C#设计模式——工厂方法模式
C#设计模式——工厂方法模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#设计模式——工厂方法模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3299字,纯文字阅读大概需要5分钟。
内容图文
一、引言
在简单工厂中讲到简单工厂模式的缺点,有一点是——简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以解决简单工厂模式中存在的这个问题,下面就具体看看工厂模式是如何解决该问题的。
二、工厂方法模式的实现
工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许系统不修改工厂类逻辑的情况下来添加新产品,这样也就克服了简单工厂模式中缺点。下面看下工厂模式的具体实现代码(这里还是以简单工厂模式中点菜的例子来实现):
/// <summary> /// 菜的抽象对象 /// </summary> public abstract class Food { // 输出点了什么菜 public abstract void Print(); } /// <summary> /// 炒土豆丝 /// </summary> public class FriedPotatoShreds : Food { public override void Print() { Console.WriteLine("炒土豆丝"); } } /// <summary> /// 尖椒炒鸡蛋 /// </summary> public class PepperFriedEgg : Food { public override void Print() { Console.WriteLine("尖椒炒鸡蛋!"); } } /// <summary> /// 西红柿炒鸡蛋 /// </summary> public class ScrambledEggTomato : Food { public override void Print() { Console.WriteLine("一份西红柿炒蛋!"); } } /// <summary> /// 抽象工厂类 /// </summary> public abstract class Creator { // 工厂方法 public abstract Food CreateFoddFactory(); } /// <summary> /// 炒土豆丝工厂 /// </summary> public class FriedPotatoShredsFactory : Creator { public override Food CreateFoddFactory() { return new FriedPotatoShreds(); } } /// <summary> /// 尖椒炒鸡蛋工厂 /// </summary> public class PepperFriedEggFactory : Creator { public override Food CreateFoddFactory() { return new PepperFriedEgg(); } } /// <summary> /// 西红柿炒鸡蛋工厂 /// </summary> public class ScrambledEggTomatoFactory : Creator { public override Food CreateFoddFactory() { return new ScrambledEggTomato(); } }
/// <summary> /// 客户端调用 /// </summary> class Client { static void Main(string[] args) { // 初始化做菜的两个工厂() Creator scrambledEggTomatoFactory = new ScrambledEggTomatoFactory(); Creator pepperFriedEggFactory = new PepperFriedEggFactory(); // 开始做西红柿炒蛋 Food tomatoScrambleEggs = pepperFriedEggFactory.CreateFoddFactory(); tomatoScrambleEggs.Print(); //开始做土豆肉丝 Food shreddedPorkWithPotatoes = scrambledEggTomatoFactory.CreateFoddFactory(); shreddedPorkWithPotatoes.Print(); Console.Read(); } }
使用工厂方法实现的系统,如果系统需要添加新产品时,我们可以利用多态性来完成系统的扩展,对于抽象工厂类和具体工厂中的代码都不需要做任何改动。例如,我们我们还想点一个“肉末茄子”,此时我们只需要定义一个肉末茄子具体工厂类和肉末茄子类就可以。而不用像简单工厂模式中那样去修改工厂类中的实现(具体指添加case语句)。具体代码为:
/// <summary> /// 肉末茄子这道菜 /// </summary> public class MincedMeatEggplant : Food { /// <summary> /// 重写抽象类中的方法 /// </summary> public override void Print() { Console.WriteLine("肉末茄子好了"); } } /// <summary> /// 肉末茄子工厂类,负责创建肉末茄子这道菜 /// </summary> public class MincedMeatEggplantFactory : Creator { /// <summary> /// 负责创建肉末茄子这道菜 /// </summary> /// <returns></returns> public override Food CreateFoddFactory() { return new MincedMeatEggplant(); } } /// <summary> /// 客户端调用 /// </summary> class Client { static void Main(string[] args) { // 如果客户又想点肉末茄子了 // 再另外初始化一个肉末茄子工厂 Creator minceMeatEggplantFactor = new MincedMeatEggplantFactory(); // 利用肉末茄子工厂来创建肉末茄子这道菜 Food minceMeatEggplant = minceMeatEggplantFactor.CreateFoddFactory(); minceMeatEggplant.Print(); Console.Read(); } }
厂方法模式的定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式让一个类的实例化延迟到其子类。
工厂方法模式的结构
总结:Factory Method模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式让一个类的实例化延迟到其子类。
Factory Method—参与者
原文:http://www.cnblogs.com/sjkzy/p/7103729.html
内容总结
以上是互联网集市为您收集整理的C#设计模式——工厂方法模式全部内容,希望文章能够帮你解决C#设计模式——工厂方法模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。