JAVA程序设计ppt课件

上传人:b410****zcfj 文档编号:252245756 上传时间:2024-11-14 格式:PPTX 页数:34 大小:1.20MB
返回 下载 相关 举报
JAVA程序设计ppt课件_第1页
第1页 / 共34页
JAVA程序设计ppt课件_第2页
第2页 / 共34页
JAVA程序设计ppt课件_第3页
第3页 / 共34页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,披萨工厂构建案例,Pizza Factory Building Case,披萨工厂构建案例Pizza Factory Buildin,有关对象创建,-new,按照前面介绍的设计原则,应该面向接口编程而不是面向,具体,编程,因为面向具体编程会使得设计更脆弱,缺乏灵活性。,但是我们每次使用,new,时,是不是正在违背这一原则呢?,我们想用接口,但却必须建立一个具体类的实例,Duck duck =new MallardDuck(),2,有关对象创建-new按照前面介绍的设计原则,应该面向接口编程,问题,当拥有一群相关的具体类时,常常被迫写出类似下面的代码:,Duck duck;,If(picnic),duck=new MallardDuck();,else if(hunting),duck=new DecoyDuck();,else if(inBathTub),duck=new RubberDuck();,这样做的原因是直到运行时我们才知道需要实例化那个类。,这样做的后果是如果应用要做变化或扩展,往往要修改这段代码。这使得维护困难并容易引入错误。,3,问题当拥有一群相关的具体类时,常常被迫写出类似下面的代码:,问题在哪里?是,new,的问题吗?,从技术上来说,,new,并没有任何问题。,new,是,java,最基本的部分。那么问题在哪里?,真正的问题在于,“,变化,”,如果对接口编程,我们可实现与许多,“,变化,”,的隔离,因为通过多态机制,你的代码对于实现接口的新类依然适用。,但是使用具体类麻烦就来了,因为增加新的具体类时相应代码可能,需要,修改。,4,问题在哪里?是new的问题吗?从技术上来说,new并没有任何,Pizza,5,Pizza5,Pizza,的生产过程,Pizza store,的主要步骤,客户点,pizza,准备,pizza,原料,制作一个生的,pizza,烘烤,切割成块,Pizza,装盒,为客户呈上,pizza,成品,6,Pizza 的生产过程Pizza store的主要步骤6,1st Design,:传统的设计思路,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,种类,然后进行制作。,7,1st Design:传统的设计思路Public Class,1st Design,:传统的设计思路,8,1st Design:传统的设计思路8,1,st,Design,:传统的设计思路,9,1st Design:传统的设计思路9,1,st,Design,:传统的设计思路,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,子类型都知道其制作方法,10,1st Design:传统的设计思路Pizza orderP,1,st,Design,:传统的设计思路,其他,pizza,店推出了新产品,我们也得增加!例如,VeggiePizza,。,GreekPizza,最近不受欢迎,把它从菜单中取消。,于是,11,1st Design:传统的设计思路其他pizza店推出了新,1,st,Design,:传统的设计思路,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,菜单的变化,这部分要跟着不断地变。,这部分是不变的部分。,12,1st Design:传统的设计思路Pizza orderP,2nd Design,:分离变化,点,Pizza,店,可以设计成类:,PizzaStore,具体的,pizza,有:,CheesePizza,PepperoniPizza,VeggiePizza,pizza,店如何生成,Pizza,?,13,2nd Design:分离变化点Pizza店,可以设计成类:,2nd Design,:分离变化,点,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,的对象中,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,对象的,代码从,orderPizza,方法,中分离出去,专门负责制作,pizza,的对象,14,2nd Design:分离变化点Pizza orderPiz,2nd Design,:分离变化,点,Pizza orderPizza(String type),Pizza pizza,pizza.prepare();,pizza.bake();,pizza.cut();,pizza.box();,return pizza;,SimplePizzaFactory,要求制作,pizza,pizza,这样,,orderPizza,方法就成为,SimplePizzaFactory,的客户。,15,2nd Design:分离变化点Pizza orderPiz,2nd Design,:分离变化,点,public class SimplePizzaFactory,public pizza createPizza(String type),Pizza pizza=null;,if(type.equals(,“,cheese,”,),pizza=new CheesePizza();,else if(type.equals(,“,pepperoni,”,),pizza=new PepperoniPizza();,else if(type.equals(,“,veggie,”,),pizza=new VeggiePizza();,return pizza;,P,izza,工厂中定义的,“,生产,”,pizza,的方法。所有客户都可以用它来实例化新的,pizza,对象,这部分代码就是从,orderPizza(),方法中抽出来的。和原来的方法一样,也是通过参数确定,pizza,的种类。,16,2nd Design:分离变化点public class S,2nd Design,:分离变化点,17,2nd Design:分离变化点17,2nd Design,:分离变化点,好像我们只是把问题从一个对象推给了另一个对象!这样做有什么好处?,SimplePizzaFactory,可以有许多个客户,当实现改变时我们只需要修改,SimplePizzaFactory,,而不需修改众多的客户,是否满足开闭原则?,18,2nd Design:分离变化点好像我们只是把问题从一个对象,SimplePizzaFactory,的多个客户,19,SimplePizzaFactory的多个客户19,重写,PizzaStore,类,-,工厂产生,Pizza,对象,public class PizzaStore,SimplePizzaFactory factory;,public PizzaStore(SimplePizzaFactory factory),this.factory=factory;,public Pizza orderPizza(String type),Pizza pizza;,pizza=factory.createPizza(type);,pizza.prepare();,pizza.bake();,pizza.cut();,pizza.box();,return pizza;,/other methods here,20,重写PizzaStore类-工厂产生Pizza对象publi,依赖倒置原则,Dependency Inversion Principle,要依赖于抽象,不要依赖于具体类,与针对接口编程,不针对实现编程相似,DIP,原则更倾向于抽象,此原则说明不能让高层组件依赖于底层组件,Do,not call me,I will call you,!,21,依赖倒置原则Dependency Inversion Pri,依赖倒置原则,Public class DependentPizzaStore,Public Pizza createPizza(String style,String type),If(Style.equals(,“,NY,”,),If(type.equals(,“,cheese,”,),pizza=new NyStyleCheesePizza();,else if(type.equals(,“,veggie,”,),Pizza=neww NYStyleVeggiePizza();,.,其它代码,else if(Style.equals(,“,Chichago,”,),If(type.equals(,“,cheese,”,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!