JAVA 面向对象经典HeadFirst-Factory课件.pptVIP

JAVA 面向对象经典HeadFirst-Factory课件.ppt

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1 有关对象创建-new 按照前面介绍的设计原则,我们应该面向接口编程而不是面向实现编程,因为面向实现编程会使得我们的设计更脆弱,缺乏灵活性。 但是我们每次使用new时,是不是正在违背这一原则呢? 我们想用接口 但却必须建立一个具体类的实例 Duck duck = new MallardDuck() Pizza Factory 2 问题… 当你拥有一组相关的具体类时,你常常被迫写出类似下面的代码: Duck duck; If (picnic) { duck=new MallardDuck(); } else if (hunting) { duck=new DecoyDuck(); } else if (inBathTub) { duck=new RubberDuck(); } 这样做的原因是直到运行时我们才知道需要实例化那个类。 这样做的后果是如果应用要做变化或扩展,往往要修改这段代码。这使得维护困难并容易引入错误。 Pizza Factory 3 问题在哪里?是new的问题吗? 从技术上来说,new并没有任何问题。new是java最基本的部分。那么问题在哪里? 真正的问题在于“变化” 如果对接口编程,我们可实现与许多“变化”的隔离,因为通过多态机制,你的代码对于实现接口的新类依然适用。 但是使用具体类麻烦就来了,因为增加新的具体类时相应代码可能就必须修改。 Pizza Factory 4 Pizza Pizza Factory 5 Pizza 的生产过程 Pizza store的主要步骤 客户点pizza 准备pizza原料,制作一个生的pizza 烘烤 切割成块 Pizza装盒 为客户呈上pizza成品 Pizza Factory 6 Pizza store-orderPizza方法 Public Class PizzaStore { //…other code Pizza orderPizza() { Pizza pizza = new Pizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } //…other code } 为了让系统有弹性,希望这是一个抽象类或者接口,可惜抽象类或接口都不能被实例化 而且,我们有许多种pizza,所以我们增加一些代码,来确定合适的pizza种类,然后进行制作。 Pizza Factory 7 pizza种类扩展后的类图 Pizza Factory 8 修改后的代码 Pizza orderPizza(String type) { Pizza pizza; if (type.equals(“cheese”)){ 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实例,并赋值给实例变量。(注意:各种pizza实现接口Pizza) 传递pizza的类型给方法orderPizza 每一种pizza子类型都知道其制作方法 Pizza Factory 9 适应市场,改变pizza种类 其他pizza店推出了新产品,我们也得增加!例如VeggiePizza。 GreekPizza最近不受欢迎,把它从菜单中取消。 于是… Pizza Factory 10 修改代码 Pizza orderPizza(String type) { Pizza pizza if (type.equals(“cheese”)){ pizza = new CheesePizza(); } else if (type.equals(“greek”)){ pizza = new GreekPizza(); } else if (type.equals(“pepperoni”)){ pizza = new PepperoniPizza(); } else if (type.equals(“veggie”)){ pizza = new Ve

文档评论(0)

mwk365 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档