电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PDF文档下载
分享到微信 分享到微博 分享到QQ空间

设计模式培训-factorymethod

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

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

设计模式培训-factorymethod

Design Pattern 设计模式设计模式 工厂方法模式工厂方法模式 张长春张长春 MSN:aphel_zhanghotmail.com 建立对象实例交给子类 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 www.fineprint.com.cn 复习上一节课的内容 装饰模式:通过创建一个包装对象,也就是装饰来包裹真实的 对象,在不修改被包装对象的基础之上实现新的功能。 设计原则 类的开- 闭原则: 类的设计应当支持扩展而拒绝 修改! 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() methodB() /Other methods component PDF 文件使用 “pdfFactory Pro“ 试用版本创建 www.fineprint.com.cn 复习上一节课的内容 到本节课程为止,我们学习了: OO基础 抽象、封装、多态、继承 OO原则 封装变化 使用组合而不是继承 面向接口编程而不是实现 在相互影响的对象间努力做到松散耦合设计 类的开- 闭原则 OO模式 策略模式Strategy 观查者模式Observer 装饰模式Decorator PDF 文件使用 “pdfFactory Pro“ 试用版本创建 www.fineprint.com.cn 写在课程之前 接下来的课程我们来学习一些松耦合的接下来的课程我们来学习一些松耦合的OO设计设计。除了使用 new操作以外,还有很多制造对象的方法。例如在本节课程 中你将学习到 实例化(instantiation) ,这是一种不总是被公开 执行的行为,它经常导致耦合问题。当然,你不希望那样, 不是吗? OK,看工厂模式怎么把你从糟糕的依赖关系中拯救出来。 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 www.fineprint.com.cn 仔细思考 “new”带来的问题 OK,现在我们已经学习了三个设计模 式以及一些设计原则,可是仍然不能回 答我的新的问题。我们不想面向实现编 程,但是我随时都要使用新的东西,这 就是我极力想解决的,你说对吗? 当然,当你看到new的时候你马上就想实例化 一个具体的类,这样就很明显是面向实现在编 程而不是面向接口。不过这是一个好问题,你 已经意识到了为一个具体的类编程将使得它比 较脆弱并很少有弹性。 Duck duck=new mallardDuck(); 我们本来是想通过接口来使 得我们的代码更具备柔性 但是在这里我们不得不为一 个具体的类创建一个实例 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 www.fineprint.com.cn 想想问题在哪里? 当我们对一个相关的具体类有完整的设置时,通常我们不得不写这样的代码: Duck duck; if (picnic) duck = new MallardDuck(); else if (hunting) duck = new DecoyDuck(); else if (inBathTub) duck = new RubberDuck(); 我们有很多不同的Duck类,并且除非在运 行时被指定,否则我们不知道哪一种Duck 类会被实例化 运行时: 例如野餐(picnic)时我们需 要实例化野鸭 (MallardDuck) 当看到这样的代码,我们可以理解如果需求改变了或者功能扩展将花费 我们大量时间,我们不得不重新打开代码来检查到底哪些地方需要增加 (或者修改和删除)。 通常这种类型的代码将使得应用程序的维护和更新变得更加困难,并且 很容易出错。 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 www.fineprint.com.cn new()方法有什么问题呢? 但是你不得不在某些地 方创建一个对象,并且 Java中只提供了一种方 法(new)来创建对 象,不是吗?难道还有 其他途径吗? 从技术的角度来说,通过new来创建对象是没错的,毕 竟,它是Java中提供的一项基本功能。其实错误的是我 们前面曾经犯过的错,就是“变化”以及变化对我们使用 new方法带来的影响。 如果是面向接口的编程,我们可以隔离一些可能使得系 统崩溃的变化。 为什么呢?如果我们的代码是面向接口的,那么它可以 为任何新的通过多态实现了这个接口的类工作。 不过,当代码需要使用很多具体的类时,我们将发现一 些麻烦,增加新的具体类的时候,我们不得不修改代 码。 所以,换句话说,我们的代码并不是“拒绝修改”的,如果 要扩展新的具体类型时,我们不得不重新打开代码进行修 改. 那怎么办呢?让我们回想一下我们前 面学习的第一个设计原则: 识别在程序中的那些多变的特征,识别在程序中的那些多变的特征, 并且把它们和稳定的特征分离开来并且把它们和稳定的特征分离开来 这里不符合我们前面 讲的开- 闭原则哈”! PDF 文件使用 “pdfFactory Pro“ 试用版本创建 www.fineprint.com.cn 识别可变的特征 假定你拥有一家比萨店,作为一家切边比萨店的拥有者,你 可能写这样的代码: Pizza orderPizza() Pizza pizza = new Pizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; 为了使得代码具备柔性和扩展能 力,我们非常希望这是一个抽象类 或者是个接口,但如果作为抽象类 或者接口,我们将不能直接实例化 它。 比萨准备 烘烤 切边 装盒 比 萨 的 制 作 过 程 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 www.fineprint.com.cn 但比萨有很多种类 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 PepperoniPizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; 由于比萨的种类很多,所以你需要增加一些代码来定义你需要的比萨 类型,并创建对应的实例: 通过参数传递比萨的类型 基于各种比萨的类型,我们实例化 相应的类并且指派比萨实例变量。 注意,在这里每一种比萨都已经不 得不实现了Pizza这个接口类,即具 体实现了prepare(),bake(),cut(), box()等方法。 一旦我们获取了一种Pizza 类(具体类),我们就调 用该具体类的已经实现 prepare(),bake(), cut(),box()的方法来制 作,烘烤,切边以及装 盒。 每一个Pizza的子类型都均 已实现了prepare(), bake(),cut(),box()的方 法 pepperoni 意大利辣香肠 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 www.fineprint.com.cn 真正有压力的是需要增加很多新的比萨种类 你意识到你所有的竞争者在其菜单中已经增加了一组时尚的比萨种类: 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 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“ 试用版本创建 www.fineprint.com.cn 封装对象的创建 OK,我们现在意识到,我们最好是能够把对象的创建从oderPizza()中移出来。我们应 该怎么做呢?我们可以把这部分代码转移到另外一个对象中,这个对象专门用来创建 具体的比萨种类。 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“ 试用版本创建 www.fineprint.com.cn order

注意事项

本文(设计模式培训-factorymethod)为本站会员(n****)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

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




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.