欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    C#设计模式系列工厂方法模式FactoryMethod.docx

    • 资源ID:26174315       资源大小:16.90KB        全文页数:10页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C#设计模式系列工厂方法模式FactoryMethod.docx

    1、C#设计模式系列工厂方法模式FactoryMethodC#设计模式系列:工厂方法模式(Factory Method) 1. 工厂方法模式简介 1. 工厂方法模式简介1.1 定义工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式是以一个类的实例化延迟到其子类。Factory Method模式用于在不指定待创建对象的具体类的情况下创建对象。Factory Method模式的主要意图是隐藏对象创建的复杂性。Client通常不指定要创建的具体类,Client将面向接口或抽象类进行编码,让Factory类负责创建具体的类型。通常Factory类有一个返回抽象类或者接口的静态方

    2、法。Client通常提供某种信息让Factory类使用提供的信息来确定创建并返回哪个子类。将创建子类的责任抽象出来的好处是允许Client完全无需考虑依赖类是如何创建的,这遵守依赖倒置原则(Dependency Inversion Principle, DIP)。Factory Method模式另外一个好处是把负责对象创建的代码集中起来,如果需要修改对象生成方式,可以轻松定位并更新,而不会影响到依赖它的代码。在面向对象编程中,一般方法是用一个new操作符产生一个对象的实例。但是在一些情况下,用new操作符直接生成对象会带来一些问题。首先,要使用new运算符创建一个对象必须清楚所要创建的对象的类

    3、信息,包括类名、构造函数等,而有时并不 现实。其次许多类型的对象创建需要一系列的步骤,可能需要计算或取得对象的初始设置,选择生成那个子对象实例,或在生成需要的对象之前必须生成一些辅助功能的对象。在这些情况下,新对象的建立就是一个过程,而不是一个简单的操作。为轻松方便地完成复杂对象的创建,从而引入了工厂模式。1.2 使用频率高2. 工厂方法模式结构2.1 结构图2.2 参与者工厂方法模式参与者:Product: Product角色,定义工厂方法所创建的对象的接口ConcreteProduct:具体Product角色,实现Product接口Factory 抽象的工厂角色,声明工厂方法,该方法返回一

    4、个Product类型的对象 Factory可以定义一个工厂方法的默认实现,返回一个默认的ConcreteProduct 对象。可以调用工厂方法以创建一个Product对象。ConcreteFactory:具体的工厂角色,创建具体Product的子工厂,重写工厂方法以返回一个ConcreteProduct实例3. 工厂方法模式结构实现Product.csusing System; using System.Collections.Generic; using System.Linq; using System.Text;namespace DesignPatterns.FactoryMethod

    5、Pattern.Structural / / 定义Product抽象类,Client调用Product抽象类,并由Factory来创建具体类。 / public abstract class Product ConcreteProductA.csusing System; using System.Collections.Generic; using System.Linq; using System.Text;namespace DesignPatterns.FactoryMethodPattern.Structural public class ConcreteProductA : Pro

    6、duct ConcreteProductB.csusing System; using System.Collections.Generic; using System.Linq; using System.Text;namespace DesignPatterns.FactoryMethodPattern.Structural public class ConcreteProductB : Product Factory.csusing System; using System.Collections.Generic; using System.Linq; using System.Text

    7、;namespace DesignPatterns.FactoryMethodPattern.Structural public abstract class Factory public abstract Product CreateProduct(); ConcreteFactoryA.csusing System; using System.Collections.Generic; using System.Linq; using System.Text;namespace DesignPatterns.FactoryMethodPattern.Structural public cla

    8、ss ConcreteFactoryA : Factory public override Product CreateProduct() return new ConcreteProductA(); ConcreteFactoryB.csusing System; using System.Collections.Generic; using System.Linq; using System.Text;namespace DesignPatterns.FactoryMethodPattern.Structural public class ConcreteFactoryB : Factor

    9、y public override Product CreateProduct() return new ConcreteProductB(); Program.csusing System; using System.Collections.Generic; using System.Linq; using System.Text;using DesignPatterns.FactoryMethodPattern.Structural;namesp ace DesignPatterns.FactoryMethodPattern class Program static void Main(s

    10、tring args) Factory factories = new Factory2; factories0 = new ConcreteFactoryA(); factories1 = new ConcreteFactoryB(); foreach (Factory factory in factories) Product product = factory.CreateProduct(); Console.WriteLine(Created 0, product.GetType().Name); 运行输出:Created ConcreteProductA Created Concre

    11、teProductB 请按任意键继续. . .4. 工厂方法模式实践应用假设你现在是一家KFC的管理者,要给顾客提供一系列的食品,如鸡翅、鸡腿等,顾客没要求一种食品,KFC应当可以很快生 产出来,采用工厂模式来实现这个过程。KFCFood.csusing System; using System.Collections.Generic; using System.Linq; using System.Text;namespace DesignPatterns.FactoryMethodPattern.Practical / / 抽象的KFC食品,Product角色 / public abstr

    12、act class KFCFood public abstract void Display(); Chicken.csusing System; using System.Collections.Generic; using System.Linq; using System.Text;namespace DesignPatterns.FactoryMethodPattern.Practical public class Chicken : KFCFood public override void Display() Console.WriteLine(鸡腿+ 1); Wings.csusi

    13、ng System; using System.Collections.Generic; using System.Linq; using System.Text;namespace DesignPatterns.FactoryMethodPattern.Practical public class Wings : KFCFood public override void Display() Console.WriteLine(鸡翅+ 1); IKFCFactory.csusing System; using System.Collections.Generic; using System.L

    14、inq; using System.Text;namespace DesignPatterns.FactoryMethodPattern.Practical public interface IKFCFactory KFCFood CreateFood(); ChickenFactory.csusing System; using System.Collections.Generic; using System.Linq; using System.Text;namespace DesignPatterns.FactoryMethodPattern.Practical public class

    15、 ChickenFactory : IKFCFactory public KFCFood CreateFood() return new Chicken(); WingsFactory.csusing System; using System.Collections.Generic; using System.Linq; using System.Text;namespace DesignPatterns.FactoryMethodPattern.Practical public class WingsFactory : IKFCFactory public KFCFood CreateFoo

    16、d() return new Wings(); Program.csusing System; using System.Collections.Generic; using System.Linq; using System.Text;using DesignPatterns.FactoryMethodPattern.Practical;namespa ce DesignPatterns.FactoryMethodPattern class Program static void Main(string args) / 定义一个鸡腿工厂 IKFCFactory factory = new C

    17、hickenFactory(); / 生产鸡腿 KFCFood food1 = factory.CreateFood(); food1.Display(); / 生产鸡腿 KFCFood food2 = factory.CreateFood(); food2.Display(); / 生产鸡腿 KFCFood food3 = factory.CreateFood(); food3.Display(); 运行输出:鸡腿+ 1 鸡腿+ 1 鸡腿+ 1 请按任意键继续. . . 在以上例子中,使用工厂模式的好处: 1. 客户端在创建产品的时候只需指定一个子工厂而无 需了解该子工厂具体创建什么产品;2

    18、. 当需求有变动,要不food1、food2、food3均改为“鸡翅”的时候,只需 将IKFCFactory factory = new ChickenFactory(); 改为IKFCFactory factory = new WingsFactory(); 即可; 3. 在工厂方法模式中,核心的工厂类不是负责所有产品 的创建,而是将具体的创建工作交给子类ConcreteFactory 去做。工厂类仅仅负责给出具体工厂必须实现的接口,而不涉及哪一个产品类被实例化这种细节。工厂方法模式可以使得系统在不需要修改原有代码的情况下引进新产品,如现在要增加一种新的产品“薯条”,则无需修改原有代码,只需

    19、增加一个“薯条”产品类和一个相应的“薯条”子工厂即可。在工厂方法模式中,子工厂与产品类往往具有平行的等级结构,它们之间一一对应。5. 工厂方法模式应用分析5.1 工厂方法模式适用情形当一个类不知道它所必须创建的对象的类信息的时候当一个类希望由它来指定它所创建的对象的时候当类将创建对象的职责委托给多个辅助子类中的某一个,并且希望将哪一个辅助之类是代理者这一信息局部化的时候5.2 工厂方法模式特点使用工厂方法在一个类的内部创建对象通常比直接创建对象更灵活工厂方法模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到子类,从而提供了一种扩展的策略,较好的解决了紧耦合的关系工厂方法模式遵守依赖倒

    20、置原则(Dependency Inversion Principle,DIP)5.3 工厂方法模式与简单工厂模式区别工厂方法模式和简单工厂模式在结构上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体工厂类上。工厂方法模式可以允许很多具体工厂类从抽象工厂类中将 创建行为继承下来,从而可以成为多个简单工厂模式的综合,进而推广了简单工厂模式。工厂方法模式退化后可以 变得很像简单工厂模式。如果非常确定一个系统只需要一个具体工厂类,那么就不妨把抽象工厂类合并到具体的工厂类中去。由于只有一个具体工厂类,所以不妨将工厂方法改成为静态方法,这时候就得到了简单工厂模式分类: 设计模式


    注意事项

    本文(C#设计模式系列工厂方法模式FactoryMethod.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开