- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
The Factory Pattern(工厂模式).ppt
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”
您可能关注的文档
- Network Driver in Linux 2.4.ppt
- Network Layer.ppt
- Neural Networks(类神经网路概论) BY 胡兴民老师.ppt
- NIC-based intrusion detectionA feasibility study.ppt
- No.8 Middle School, Anxi.ppt
- Nosocomial infections.ppt
- Objective C语言.ppt
- ObjectivesThe student will be able to.ppt
- Open Your Eyes Free Your Mind.ppt
- OpenGL图形函数库.ppt
- The First Period of Unit 1, SEFC I.ppt
- The Mean Value Theorem.ppt
- The NCNR Spin-Polarized Triple-Axis Spectrometer (SPINS).ppt
- The Relationship Between Total and Marginal Values.ppt
- The Science of Electronics Analog Devices.ppt
- The secret of happiness.ppt
- The z-Transform.ppt
- Theories of Human Development.ppt
- think-廖伟.ppt
- Thrombolysis for patients > 80 – a different view.ppt
文档评论(0)