电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

设计模式培训-factorymethod

60页
  • 卖家[上传人]:n****
  • 文档编号:88918422
  • 上传时间:2019-05-13
  • 文档格式:PDF
  • 文档大小:984.17KB
  • / 60 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、Design Pattern 设计模式设计模式 工厂方法模式工厂方法模式 张长春张长春 MSN:aphel_ 建立对象实例交给子类 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 复习上一节课的内容 装饰模式:通过创建一个包装对象,也就是装饰来包裹真实的 对象,在不修改被包装对象的基础之上实现新的功能。 设计原则 类的开- 闭原则: 类的设计应当支持扩展而拒绝 修改! Component methodA() methodB() /Other methods ConcreteComponent methodA() methodB() /Other methods Decorator methodA() methodB() /Other methods ConcreteDecoratorA Component wrappedObj methodA() methodB() newBehavior() /Other methods ConcreteDecoratorB Component wrappedObj Object newState methodA() method

      2、B() /Other methods component PDF 文件使用 “pdfFactory Pro“ 试用版本创建 复习上一节课的内容 到本节课程为止,我们学习了: OO基础 抽象、封装、多态、继承 OO原则 封装变化 使用组合而不是继承 面向接口编程而不是实现 在相互影响的对象间努力做到松散耦合设计 类的开- 闭原则 OO模式 策略模式Strategy 观查者模式Observer 装饰模式Decorator PDF 文件使用 “pdfFactory Pro“ 试用版本创建 写在课程之前 接下来的课程我们来学习一些松耦合的接下来的课程我们来学习一些松耦合的OO设计设计。除了使用 new操作以外,还有很多制造对象的方法。例如在本节课程 中你将学习到 实例化(instantiation) ,这是一种不总是被公开 执行的行为,它经常导致耦合问题。当然,你不希望那样, 不是吗? OK,看工厂模式怎么把你从糟糕的依赖关系中拯救出来。 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 仔细思考 “new”带来的问题 OK,现在我们已经学习了三个设计模 式以及一些设计原

      3、则,可是仍然不能回 答我的新的问题。我们不想面向实现编 程,但是我随时都要使用新的东西,这 就是我极力想解决的,你说对吗? 当然,当你看到new的时候你马上就想实例化 一个具体的类,这样就很明显是面向实现在编 程而不是面向接口。不过这是一个好问题,你 已经意识到了为一个具体的类编程将使得它比 较脆弱并很少有弹性。 Duck duck=new mallardDuck(); 我们本来是想通过接口来使 得我们的代码更具备柔性 但是在这里我们不得不为一 个具体的类创建一个实例 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 想想问题在哪里? 当我们对一个相关的具体类有完整的设置时,通常我们不得不写这样的代码: Duck duck; if (picnic) duck = new MallardDuck(); else if (hunting) duck = new DecoyDuck(); else if (inBathTub) duck = new RubberDuck(); 我们有很多不同的Duck类,并且除非在运 行时被指定,否则我们不知道哪一种Duck 类会被实例化

      4、运行时: 例如野餐(picnic)时我们需 要实例化野鸭 (MallardDuck) 当看到这样的代码,我们可以理解如果需求改变了或者功能扩展将花费 我们大量时间,我们不得不重新打开代码来检查到底哪些地方需要增加 (或者修改和删除)。 通常这种类型的代码将使得应用程序的维护和更新变得更加困难,并且 很容易出错。 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 new()方法有什么问题呢? 但是你不得不在某些地 方创建一个对象,并且 Java中只提供了一种方 法(new)来创建对 象,不是吗?难道还有 其他途径吗? 从技术的角度来说,通过new来创建对象是没错的,毕 竟,它是Java中提供的一项基本功能。其实错误的是我 们前面曾经犯过的错,就是“变化”以及变化对我们使用 new方法带来的影响。 如果是面向接口的编程,我们可以隔离一些可能使得系 统崩溃的变化。 为什么呢?如果我们的代码是面向接口的,那么它可以 为任何新的通过多态实现了这个接口的类工作。 不过,当代码需要使用很多具体的类时,我们将发现一 些麻烦,增加新的具体类的时候,我们不得不修改代 码。 所以,换句话说

      5、,我们的代码并不是“拒绝修改”的,如果 要扩展新的具体类型时,我们不得不重新打开代码进行修 改. 那怎么办呢?让我们回想一下我们前 面学习的第一个设计原则: 识别在程序中的那些多变的特征,识别在程序中的那些多变的特征, 并且把它们和稳定的特征分离开来并且把它们和稳定的特征分离开来 这里不符合我们前面 讲的开- 闭原则哈”! PDF 文件使用 “pdfFactory Pro“ 试用版本创建 识别可变的特征 假定你拥有一家比萨店,作为一家切边比萨店的拥有者,你 可能写这样的代码: Pizza orderPizza() Pizza pizza = new Pizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; 为了使得代码具备柔性和扩展能 力,我们非常希望这是一个抽象类 或者是个接口,但如果作为抽象类 或者接口,我们将不能直接实例化 它。 比萨准备 烘烤 切边 装盒 比 萨 的 制 作 过 程 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 但比萨有很多种类 Pizz

      6、a orderPizza (String type) Pizza pizza; if(type.equals(“chesse“) pizza = new CheesePizza(); else if(type.equals(“greek“) pizza = new GreekPizza(); else if (type.equals(“pepperoni“) pizza = new PepperoniPizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; 由于比萨的种类很多,所以你需要增加一些代码来定义你需要的比萨 类型,并创建对应的实例: 通过参数传递比萨的类型 基于各种比萨的类型,我们实例化 相应的类并且指派比萨实例变量。 注意,在这里每一种比萨都已经不 得不实现了Pizza这个接口类,即具 体实现了prepare(),bake(),cut(), box()等方法。 一旦我们获取了一种Pizza 类(具体类),我们就调 用该具体类的已经实现 prepare(),bake(), c

      7、ut(),box()的方法来制 作,烘烤,切边以及装 盒。 每一个Pizza的子类型都均 已实现了prepare(), bake(),cut(),box()的方 法 pepperoni 意大利辣香肠 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 真正有压力的是需要增加很多新的比萨种类 你意识到你所有的竞争者在其菜单中已经增加了一组时尚的比萨种类: Clam Pizza(蚧 蛤比萨) 和Veggie Pizza(素食比萨)。很显然,你需要保持竞争力,因此你应当在你 的菜单中也加入这两种比萨。并且你已经很久没有卖Greek Pizza(希腊比萨) 了,所 以你决定从菜单中删除掉它。 Pizza orderPizza(String type) Pizza pizza; if(type.equals(“chesse“) pizza = new CheesePizza(); else if(type.equals(“greek“) pizza = new GreekPizza(); else if (type.equals(“pepperoni“) pizza = new

      8、PepperoniPizza(); else if (type.equals(“clam“) pizza = new ClamPizza(); else if (type.equals(“veggie“) pizza = new VeggiePizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; 这就Pizza订单中常常变化的 部分,每一次Pizza种类的不 变化,你将不得不一次又一次 的修改这些代码 这些就是我们期望看到的不会变化的部分。对于大 多数比萨种类来说,其制作,烹饪,和包装在多年 都是不会产生变化的。所以我们不希望这部分代码 产生变化,让具体的pizza自己操作自己的方法就可 以了。 这些代码并不是拒绝 修改的。如果比萨店 改变了比萨的供应菜 单,我们将不得不进 入这些代码来修改 它。 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 封装对象的创建 OK,我们现在意识到,我们最好是能够把对象的创建从oderPizza()中移出来。我们应 该怎么做呢?我

      9、们可以把这部分代码转移到另外一个对象中,这个对象专门用来创建 具体的比萨种类。 Pizza orderPizza(String type) Pizza pizza; pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; if(type.equals(“chesse“) pizza = new CheesePizza(); else if(type.equals(“greek“) pizza = new GreekPizza(); else if (type.equals(“pepperoni“) pizza = new PepperoniPizza(); else if (type.equals(“clam“) pizza = new ClamPizza(); else if (type.equals(“veggie“) pizza = new VeggiePizza(); 首先我们把对象的创建部 分的代码从orderPizza()方 法中移出来。 接下来我们把移出来的代码放在 一个对象中,这个对象只需要关 心怎么创建Pizza。如果其他对 象需要某种pizza,则由这个对象 来负责。 现在我们知道有这么一个对象来专门负 责生产或者创建pizza,我们可以把这个 对象叫做Factory(工厂)。 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 order

      《设计模式培训-factorymethod》由会员n****分享,可在线阅读,更多相关《设计模式培训-factorymethod》请在金锄头文库上搜索。

      点击阅读更多内容
    新上传的WORD文档
    2023年度山西省太原市万柏林区乡镇中医执业助理医师考试之中医临床医学通关考试题库带答案解析 2023年度山西省乡镇中医执业助理医师考试之中医临床医学模考模拟试题(全优) 2023年度山西省吕梁市方山县乡镇中医执业助理医师考试之中医临床医学典型题汇编及答案 2023年度山西省吕梁市方山县乡镇中医执业助理医师考试之中医临床医学模拟题库及答案 2023年度山西省临汾市襄汾县乡镇中医执业助理医师考试之中医临床医学真题练习试卷A卷附答案 2023年度山西省乡镇中医执业助理医师考试之中医临床医学过关检测试卷A卷附答案 2023年度山西省吕梁市汾阳市乡镇中医执业助理医师考试之中医临床医学综合检测试卷B卷含答案 2014学年第二学期初三语文试题卷 2023年度山西省太原市尖草坪区乡镇中医执业助理医师考试之中医临床医学综合练习试卷B卷附答案 2023年度山西省太原市古交市乡镇中医执业助理医师考试之中医临床医学考前练习题及答案 2023年度山西省吕梁市临县乡镇中医执业助理医师考试之中医临床医学自测提分题库加答案 电气工程自我介绍合集7篇 上半年网络工程师试卷参考答案与解析 2023年度广西壮族自治区桂林市阳朔县乡镇中医执业助理医师考试之中医临床医学考前冲刺模拟试卷B卷含答案 2023年度山西省太原市万柏林区乡镇中医执业助理医师考试之中医临床医学模拟题库及答案
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
     
    收藏店铺
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.