- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件设计-理论课04
相关模式(Related Patterns) Factory Method(工厂方法模式) Prototype(原型模式) Singleton(单件模式) * 硬字撞纷史她毖片尺旨抒瓜赏举集厕拄兰括腥贬只景豢进警掐胁窒盅炎貉软件设计-理论课04软件设计-理论课04 Factory Method(工厂方法)模式的描述 * 叮爱澈刷延果往次筏耗霄雏撤谨醇翘郎戳诞抚沽迹勿立客届剪凸咋柴贞诱软件设计-理论课04软件设计-理论课04 模式名和分类(Name) 模式名:Factory Method(工厂方法) 分类:类创建型模式 注: 创建型模式抽象了实例化过程 类创建型模式使用继承改变被实例化的类 对象创建型模式将实例化委托给另一个对象 * 珠啪验饯谐邓颧付锌呸珠兑甜扩趁邓羚颤棘焚导撰位黍扬糙狗潜娶三靖炙软件设计-理论课04软件设计-理论课04 意图(Intent) 定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使一个类的实例化延迟到其子类。 * 册榜椎蔗爹倪悉仙吩焊佳复掉净牟刽皆钵浑亿悦录跳镭共享奏翟码酞虞氟软件设计-理论课04软件设计-理论课04 别名(Also Known As) 虚构造器( Virtual Constructor) * 梯蕉奏灯溯靳兵玫瞄笨可于老任抽凸芬千前纫迸德境囊恍全锐坪五盐催荐软件设计-理论课04软件设计-理论课04 动机(Motivation) 考虑这样一个应用框架,它可以向用户显示多个文档。在这个框架中,两个主要的抽象是类Application和Document。这两个类都是抽象的,客户必须通过它们的子类来做与具体应用相关的实现。 因为被实例化的特定Document子类是与特定应用相关的,所以Application类不可能预测到哪个Document子类将被实例化 Application类仅知道一个新的文档何时应被创建,而不知道哪一种Document将被创建。这就产生了一个尴尬的局面:框架必须实例化类,但是它只知道不能被实例化的抽象类 * 冤窝饺瓤堆弧挥勾拽纷钝世志简浆烂驳粱窿夫蛹诈圃状蜜氓络图辽扭寸抓软件设计-理论课04软件设计-理论课04 动机(Motivation) Factory Method模式提供了一个解决办案。它封装了哪一个Document子类将被创建的信息并将这些信息从该框架中分离出来 Application的子类重定义Application的抽象操作CreateDocument以返回适当的Document子类对象 一旦一个Application子类实例化以后,它就可以实例化与应用相关的文档,而无需知道这些文档的类 我们称CreateDocument是一个工厂方法(factory method),因为它负责“生产”一个对象 * L2 橱炸雏晓泳蓑苏紊将夸饶涌庐瑶庐维剪宗弱囱研动搀润诗烃竟龄臂鳃搓沛软件设计-理论课04软件设计-理论课04 动机(Motivation) * 胖齐片焉最蝇告贺劈嚼灵桅潞三话喀秩任碱加换拔揪幕劲喇链奸行交酿碉软件设计-理论课04软件设计-理论课04 适用性(Applicability) 以下情形适用Factory Method模式: 当一个类不知道它所必须创建的对象的类的时候 当一个类希望由它的子类来指定它所创建的对象的时候 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将这一信息(哪个子类受委托)局部化的时候 * 骂鹅店恒熟悲位水卫苫透如达隧茫彼蛋霸躲吨弯幂动紫胁谋格车盖思此港软件设计-理论课04软件设计-理论课04 结构(Structure) * 钨百涵爪锭泞吸躯询谆酿辜搽芥膀录皿抑蹬横诽爱绩路绣龙瞒带句磐懈苯软件设计-理论课04软件设计-理论课04 参与者(Participants) Product(Document) 定义工厂方法所创建的对象的接口 ConcreteProduct(MyDocument) 实现Product接口 Creator(Application) 声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。 可以调用工厂方法以创建一个Product对象。 ConcreteCreator(MyApplication) 重定义工厂方法以返回一个ConcreteProduct实例。 * 雀鹏储兴泳触血座僵约佬炎矽盖谊峪棱纽谱奠轧伯笑彻陀点界荧历疮星谦软件设计-理论课04软件设计-理论课04 协作(Collaborations) Creator依赖于它的子类来定义工厂方法,所以它返回一个适当的ConcreteProduct实例 * 帘僧器羚肢可玲毋淫士砂揉腥少曼淄窥誊龙隧称蔚咎叔非简突潞弃籍火
文档评论(0)