欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > PPT文档下载
    分享到微信 分享到微博 分享到QQ空间

    java工厂设计模式课件PPT资料.ppt

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

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java工厂设计模式课件PPT资料.ppt

    1、If(picnic)duck=new MallardDuck();else if(hunting)duck=new DecoyDuck();else if(inBathTub)duck=new RubberDuck();,这样做的原因是直到运行时我们才知道需要实例化那个类。,这样做的后果是如果应用要做变化或扩展,往往要修改这段代码。这使得维护困难并容易引入错误。,问题在哪里?是new的问题吗?,从技术上来说,new并没有任何问题。new是java最基本的部分。真正的问题在于“变化”如果对接口编程,我们可实现与许多“变化”的隔离,因为通过多态机制,你的代码对于实现接口的新类依然适用。但是使用具体

    2、类麻烦就来了,因为增加新的具体类时相应代码可能就必须修改。,怎么办呢?,Duck duck=new MallardDuck()上面这段代码所在的模块与MallardDuck模块形成了耦合。,再回忆我们前面提出的面向对象设计的原则,识别应用的变化部分,并将之与固定的部分相分离。,区分变化的部分,下面我们来看一个例子Pizza店,披萨,PizzaStore类中的一段代码-订做pizza,Public Class PizzaStore/Pizza orderPizza()Pizza pizza=new Pizza();pizza.prepare();pizza.bake();pizza.cut();

    3、pizza.box();return pizza;/,真希望这是一个抽象类或者接口,可惜抽象类或接口都不能被实例化,而且,我们有许多种pizza,所以我们增加一些代码,来确定合适的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 Peppe

    4、roniPizza();,根据接受的类型,创建相应的pizza实例,并赋值给实例变量。(注意:各种pizza实现接口Pizza),传递pizza的类型给方法orderPizza,每一种pizza子类型都知道其制作方法,由于市场竞争。,其他pizza店推出了新产品,我们也得增加!例如VeggiePizza。GreekPizza最近不受欢迎,把它从菜单中取消。于是。,改!改!,Pizza orderPizza(String type)Pizza pizza;else if(type.equals(“veggie”)pizza=new VeggiePizza();,变与不变,变与不变,Pizza o

    5、rderPizza(String type)Pizza pizza;,这是变化的部分。随着Pizza菜单的变化,这部分要跟着不断地变。,这部分是不变的部分。,分离,Pizza orderPizza(String type)Pizza pizza;,把这部分封装在一个只管如何创建pizza的对象中,if(type.equals(“cheese”)pizza=new CheesePizza();,将创建pizza对象的代码从orderPizza方法中分离出去,专管制作pizza的对象,我们将专管制作pizza的对象叫做Pizza工厂,Pizza orderPizza(String type)Piz

    6、za pizza;,PizzaFactory,要求制作pizza,pizza,这样,orderPizza方法就成为PizaFactory的客户。,Pizza工厂-SimplePizzaFactory,public class SimplePizzaFactory public Pizza createPizza(String type)Pizza pizza=null;,Pizza工厂中定义了“生产”pizza的方法。所有客户都可以用它来实例化新的pizza对象,这部分代码就是从orderPizza()方法中抽出来的。和原来的方法一样,也是通过参数确定pizza的种类。,思考一下!,这看来好像

    7、我们只是把问题从一个对象推给了另一个对象!这样做有什么好处呢?可以解除客户代码(PizzaStore)与具体Pizza的耦合。SimplePizzaFactory可以有许多个客户,这样,当实现改变时我们只需要修改SimplePizzaFactory,而不需修改众多的客户。提高了聚合度,PizzaStore的职责是使用pizza对象,SimplePizzaFactory的职责是决定创建什么样的pizza对象。,重写PizzaStore类,public class PizzaStore SimplePizzaFactory factory;public PizzaStore(SimplePizza

    8、Factory factory)this.factory=factory;public Pizza orderPizza(String type)Pizza pizza;pizza=factory.createPizza(type);/other methods here,简单工厂模式,Pizza可以是一个抽象类,也可以是一个接口。,框架,框架的对外接口,简单工厂模式,有人认为这还不是一个真正的模式,只是一种程序设计的习惯。,授权pizza店,我们的pizza店非常成功,许多人都想开设我们的授权加盟店。但是,不同地区的加盟pizza店可能希望供应不同口味的pizza。怎么解决这个问题呢?,解决

    9、方法之一:建立不同的工厂,建立不同的工厂:如NYPizzaFactory、ChicagoPizzaFactory、CaliforniaPizzaFactory,在PizzaStore中包含相应工厂的实例。其代码类似于:/该pizza店提供纽约风味的pizzaNYPizzaFactory nyFactory=new NYPizzaFactory();/建立一个生产纽约风味pizza的工厂PizzaStore nyStore=new PizzaStore(nyFactory);/建立一个pizza店,引用纽约风味pizza的工厂nyStore.orderPizza(“Veggie”);/生产的是纽

    10、约风味的pizza/该pizza店提供芝加哥风味的pizzaChicagoPizzaFactory chicagoFactory=new ChicagoPizzaFactory();PizzaStore chicagoStore=new PizzaStore(chicagoFactory);chicagoStore.orderPizza(“Veggie”);,抽象工厂模式,这么多工厂,可以再增加抽象层让我们一起来设计,另一种解决方法-工厂方法模式,思路:改写的PizzaStore,将createPizza()方法放回到PizzaStore,但是声明为抽象方法,然后,为每一种地方风味创建一个Pi

    11、zzaStore的子类。,改造后的PizzaStore的代码,public abstract class PizzaStore public Pizza orderPizza(String type)Pizza pizza=createPizza(type);abstract Pizza createPizza(String type);,在PizzaStore内调用自身的一个方法来制造pizza,而不是使用一个factory对象,factory对象成了这里的一个抽象方法,下面我们需要PizzaStore的各种子类(对应不同的地区风味),让子类做决定,ChicagoPizzaStore,createPizza(),Pizza createPizza(String item)if(i


    注意事项

    本文(java工厂设计模式课件PPT资料.ppt)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开