- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
工厂与建造者
设计模式(Design pattern)简介 设计模式定义 使用设计模式的目的 设计模式的核心思想 设计模式的基本手段 设计模式的基本判定标准 设计模式中的“工厂” 动机 某些情况下用户不需要知道或不想知道产品的类型是什么,即不想用new方法产生一个对象。 有时候产生一个能够被用户直接使用的对象需要一系列的步骤,比如属性的初始化、辅助功能的实现、以及外围环境的构建等。 需要快速、大批量地生产相同型号的对象。 意图 传统创建对象的方式是用new方法,而基于上述原因用户更希望将创建对象的过程封装起来,这种封装形式就称为“工厂”。 模式 与“工厂”相关的模式有:简单工厂、工厂方法、抽象工厂。 实例 麦当劳要给顾客提供一系列的食品,如汉堡、鸡腿、可乐等,顾客要求每一种食品能很快的生产出来,试构建这一问题的类模式。 方法一: 没有封装生产过程,不符合面向对象设计的要求,也不符合设计模式的要求。 方法二:简单工厂(Simple Factory Pattern) 不符合开闭原则 工厂方法 方法三:工厂方法(Factory Method Pattern) 比较好的方案 抽象工厂 方法四:抽象工厂(Abstract Factory Pattern) 可以增加系列,但对原系列不便于修改。 5.2.4 应用举例 简单的例子: 假设你需要设计一个花园的布局。 花园有三种风格:典雅型、实用型和懒人型。 花园中有3个位置需要种植植物:花架、墙角和花园中心。 一种简单的花园设计 总结 工厂方法封装对象的生产步骤,用户不需要知道对象的具体生产过程,只需要知道产品工厂的接口即可。 我们在编写应用代码的是,注意要围绕抽象层进行编程,这样可以增加代码的通用性,减少修改的可能性。 5.3.1 建造者模式的由来 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成; 这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 5.3.1 建造者模式的由来 在实际生活中,也有这样的例子: 譬如一个房屋的构建。创建过程基本不变,但是门窗等组件却是易变的。假设房屋由五个部分组成:地基、墙壁、房顶、门、窗。构建一个房屋的步骤是一定的,而具体的组件(门、窗等)可以采用不同的材质。 5.3.2 建造者模式的意图和适用性 模式的意图 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 5.3.3 建造者模式的结构和参与者 建造者模式结构图 5.3.3 建造者模式的结构和参与者 1)Builder 为创建一个Product对象的各个部件指定抽象接口。 2)ConcreteBuilder 实现Builder的接口以构造和装配该产品的各个部件。 定义并明确它所创建的表示。 提供一个检索产品的接口 3)Director 构造一个使用Builder接口的对象。 4)Product 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示 5.3.4 应用举例 如果将KFC中的套餐作为终极产品,则怎么使用建造者模式(虽然此时套餐里的成员没有实质的逻辑关系)。 如何把组装电脑的过程设计为构建者模式 5.3.5 效果分析 1. 建造者模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。 2. 每一个Builder都相对独立,而与其它的Builder无关。 3. 可使对构造过程更加精细控制。 4. 将构建代码和表示代码分开。 5.3.6 建造者模式与抽象工厂的比较 1.抽象工厂得到的是一组对象,建造者得到的是一组对象的复合体。 2.抽象工厂不要求这组对象的关联性,而建造者则用代码实现了对象间的关联性。 3.建造者可以作为抽象工厂的后续结构。 徐承志 设计模式(C#版本) 关于“工厂”的那些事儿 汉堡 鸡腿 可乐 简单工厂 汉堡 鸡腿 麦当劳食物 生产 生产 可乐 生产 麦当劳工厂 鸡腿 汉堡 麦当劳食物 生产 生产 汉堡工厂 鸡腿工厂 可乐 生产 可乐工厂 麦当劳工厂 汉堡 鸡腿 麦当劳主食 生产 生产 1号套餐工厂 2号套餐工厂 可乐 咖啡 麦当劳饮料 竹子 bamboo 茶花 camellia 月季 rose 懒人型 lazy 丝瓜 gourd 石榴 guava 葡萄 grape 实用型 utility 兰草 orchid 榕树 banian 郁金香 tulip 典雅型 elegant 墙角 中心 花架 风格/位置 思考 其实还有一种设计模式也使用了“工厂”。 如何应对这种
文档评论(0)