欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C#设计模式 之 抽象工厂模式.doc

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

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

    C#设计模式 之 抽象工厂模式.doc

    抽象工厂(Abstract Factory) 常规的对象创建方法:/创建一个Road对象Road road =new Road();new 的问题:    实现依赖,不能应对“具体实例化类型”的变化。解决思路:    封装变化点-哪里变化,封装哪里    潜台词: 如果没有变化,当然不需要额外的封装!工厂模式的缘起    变化点在“对象创建”,因此就封装“对象创建”    面向接口编程-依赖接口,而非依赖实现最简单的解决方法:1 class RoadFactory2 public static Road CreateRoad()3                                 4   return new Road();   5 6 7 /创建一个Road对象8 Road road=roadFactory.CreateRoad();创建一系列相互依赖对象的创建工作:假设一个游戏开场景:我们需要构造"道路"、"房屋"、"地道","从林".等等对象工厂方法如下: 1     class RoadFactory 2      3         public static Road CreateRoad() 4          5             return new Road(); 6          7         public static Building CreateBuilding() 8          9             return new Building();10         11         public static Tunnel CreateTunnel()12         13             return new Tunnel();14         15         public static Jungle CreateJungle()16         17             return new Jungle();18         19     调用方式如下: 1         Road road =  RoadFactory.CreateRoad();3         Building building = RoadFactory.CreateBuilding();4         Tunnel tunnel = RoadFactory.CreateTunnel();5         Jungle jungle = RoadFactory.CreateJungle();如上可见简单工厂的问题:    不能应对"不同系列对象"的变化。比如有不同风格的场景-对应不同风格的道路,房屋、地道.如何解决:    使用面向对象的技术来"封装"变化点。动机(Motivate):    在软件系统中,经常面临着"一系统相互依赖的对象"的创建工作:同时,由于需求的变化,往往存在更多系列对象的创建工作。    如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种"封装机制"来避免客户程序和这种"多系列具体对象创建工作"的紧耦合?意图(Intent):    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。                                                 -设计模式GOF结构图(Struct):            适用性:    1.一个系统要独立于它的产品的创建、组合和表示时。    2.一个系统要由多个产品系统中的一个来配置时。    3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。    4.当你提供一个产品类库,而只想显示它们的接口不是实现时。生活例子:               结构图代码实现:1  abstract class AbstractFactory2     3        public abstract AbstractProductA CreateProductA();4        public abstract AbstractProductB CreateProductB();5     1   abstract class AbstractProductA2     3        public abstract void Interact(AbstractProductB b);4     1   abstract class AbstractProductB2     3        public abstract void Interact(AbstractProductA a);4       1    class Client 2      3         private AbstractProductA AbstractProductA; 4         private AbstractProductB AbstractProductB; 5         public Client(AbstractFactory factory) 6          7             AbstractProductA = factory.CreateProductA(); 8             AbstractProductB = factory.CreateProductB();            9         10         public void Run()11         12             AbstractProductB.Interact(AbstractProductA);13             AbstractProductA.Interact(AbstractProductB);14         15      1  class ConcreteFactory1:AbstractFactory 2      3         public override AbstractProductA CreateProductA() 4          5             return new ProductA1(); 6          7         public override AbstractProductB CreateProductB() 8          9             return new ProductB1();10         11      1     class ConcreteFactory2:AbstractFactory 2      3         public override AbstractProductA CreateProductA() 4          5             return new ProdcutA2(); 6          7         public override AbstractProductB CreateProductB() 8          9             return new ProductB2();10         11     1  class ProductA1:AbstractProductA2     3         public override void Interact(AbstractProductB b)4         5             Console.WriteLine(this.GetType().Name + "interact with" + b.GetType().Name);6         7     1   class ProductB1:AbstractProductB2     3         public override void Interact(AbstractProductA a)4         5             Console.WriteLine(this.GetType().Name + "interact with" + a.GetType().Name);6         7     1   class ProdcutA2:AbstractProductA2     3         public override void Interact(AbstractProductB b)4         5             Console.WriteLine(this.GetType().Name + "interact with" + b.GetType().Name);6         7     1  class ProductB2:AbstractProductB2     3         public override void Interact(AbstractProductA a)4         5             Console.WriteLine(this.GetType().Name + "interact with" + a.GetType().Name);6         7      1    public static void Main() 2          3          / Abstractfactory1 4             AbstractFactory factory1 = new ConcreteFactory1(); 5             Client c1 = new Client(factory1); 6             c1.Run(); 7         / Abstractfactory2 8             AbstractFactory factory2 = new ConcreteFactory2(); 9             Client c2 = new Client(factory2);10             c2.Run();11         Abstract Factory注意的几点:    如果不存在”多系列对象创建“的需求变化,则没必要应用Abstract Factory模式,静态工厂方法足矣。    "系列对象"指的是这些对象之间有相互依赖、或作用的关系。例如游戏开发场景中的"道路"与"房屋"依赖,“道路”与“地道”的依赖。Abstract Factory模式主要在于应对"新系列"的需求变动。其缺点在于难以应对”新对象“的需求变动。Abstract Factory模式经常和Factory Method模式共同组合来应对“对象创建”的需求变化。

    注意事项

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

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开