- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
The Factory Pattern(工厂模式) 问题… 关于new: 按照我们前面介绍的设计原则,我们应该面向接口编程而不是面向实现编程,因为面向实现编程会使得我们的设计更脆弱,缺乏灵活性。但是我们每次使用new时,我们是不是正在违背这一原则呢? 问题… 当你拥有一组相关的具体类时,你常常被迫写出类似下面的代码: Duck duck; If (picnic) { duck=new MallardDuck(); } else if (hunting) { duck=new DecoyDuck(); } else if (inBathTub) { duck=new RubberDuck(); } 问题在哪里?是new的问题吗? 从技术上来说,new并没有任何问题。new是java最基本的部分。真正的问题在于“变化” 如果对接口编程,我们可实现与许多“变化”的隔离,因为通过多态机制,你的代码对于实现接口的新类依然适用。但是使用具体类麻烦就来了,因为增加新的具体类时相应代码可能就必须修改。 怎么办呢? 再回忆我们前面提出的面向对象设计的原则 第一原则: 识别应用的变化部分,并将之与固定的部分相分离。 区分变化的部分 下面我们来看一个例子 Pizza店 PizzaStore类中的一段代码-订做pizza Public Class PizzaStore { //… Pizza orderPizza() { Pizza pizza = new Pizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } //… } 修改后的代码 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店推出了新产品,所以我们也得增加!例如VeggiePizza。 GreekPizza最近不受欢迎,把它从菜单中取消。 于是。。。 改!改!改! 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 VeggiePizza(); } pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } 变与不变 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 VeggiePizza(); } pizza.prepare(); pizza.bake(); p
您可能关注的文档
最近下载
- 红色革命文化-2025年高考语文作文复习之主题素材积累与运用.pdf VIP
- 中国传媒大学《微视频创意与制作》课件-微视频创意与制作-PPT-微视频创意与制作(第一章).pptx VIP
- 事故救援应急响应专项预案事故救援应急响应专项预案.doc VIP
- 人教版二年级上册数学全册教学设计(配2025年秋新版教材).docx
- 千级无尘室工程施工方案(3篇).docx VIP
- 深度解析《GBT 44037-2024焦炭溶损率及溶损后强度试验方法》.pptx
- 2025 中级注册安全工程师《金属非金属矿山安全》速记口诀.pdf
- 2025年中国吸顶式车载显示器数据监测研究报告.docx
- 九年级化学酸、碱、盐、氧化物知识小结 “三表一图”(二)天津版.doc VIP
- 部编版六年级上册语文第一周(草原-丁香结)达标测评卷 含答案.docx VIP
文档评论(0)