ImageVerifierCode 换一换
格式:PPT , 页数:40 ,大小:211.51KB ,
资源ID:1627507      下载积分:14 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/1627507.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(第十三章-工厂方法模式.ppt)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

第十三章-工厂方法模式.ppt

1、第十三章第十三章 工厂方法模式工厂方法模式 2024/5/3 周五1工厂方法模式(别名:虚拟构造)工厂方法模式(别名:虚拟构造)定定义义一一个个用用于于创创建建对对象象的的接接口口,让让子子类类决决定定实实例例化化哪哪一一个类。个类。Factory Method使一个类的实例化延迟到其子类。使一个类的实例化延迟到其子类。Mediator Pattern(Another Name:Virtual Constructor)Define an interface for creating an object,but let subclasses decide which class to insta

2、ntiate.Factory Method lets a class defer instantiation to subclasses.在铸造成型的过程中,制造者首先将塑料加工成可成型的粉末,然后将塑料粉末注入到需要的模具中。在Factory Method模式中,子类(在这里就是指模具)来决定需要实例化那个类。在这个例子中,ToyHorseMold类就是被实例化的类。一一、概述概述 2024/5/3 周五3 当系统准备为用户提供某个类的子类的实例,当系统准备为用户提供某个类的子类的实例,又不想让用户代码和该子类形成耦合时,就可以又不想让用户代码和该子类形成耦合时,就可以使用工厂方法模式来设计

3、系统。工厂方法模式的使用工厂方法模式来设计系统。工厂方法模式的关键是在一个接口或抽象类中定义一个抽象方法,关键是在一个接口或抽象类中定义一个抽象方法,该方法返回某个类的子类的实例,该抽象类或接该方法返回某个类的子类的实例,该抽象类或接口让其子类或实现该接口的类通过重写这个抽象口让其子类或实现该接口的类通过重写这个抽象方法返回某个子类的实例。方法返回某个子类的实例。二、二、工厂方法模式的结构与使用工厂方法模式的结构与使用2024/5/3 周五4模式的结构中包括四种角色:模式的结构中包括四种角色:抽象产品(抽象产品(ProductProduct)具体产品(具体产品(ConcreteProductC

4、oncreteProduct)构造者(构造者(CreatorCreator)具体构造者(具体构造者(ConcreteCreatorConcreteCreator)2024/5/3 周五5模式的模式的UMLUML类图类图 模式的结构的描述与使用模式的结构的描述与使用有一个PenCore类(笔芯),该类是一个抽象类。假设PenCore类有三个子类,分别是RedPenCore、BluePenCore和BlackPenCore,而系统设计的目的是为用户提供BallPen类(圆珠笔)的子类的实例,即含有笔芯的圆珠笔,也就是说系统想让用户使用BallPen类的子类的实例来得到PenCore类的子类的实例。

5、2024/5/3 周五7模式的结构的描述与使用模式的结构的描述与使用 1 1抽象产品(抽象产品(ProductProduct):PenCore.java PenCore.java public abstract class PenCorepublic abstract class PenCore String color;String color;public abstract void writeWord(String s);public abstract void writeWord(String s);2024/5/3 周五8模式的结构的描述与使用模式的结构的描述与使用 2 2具体产品(

6、具体产品(ConcreteProductConcreteProduct)_1:_1:RedPenCore.java RedPenCore.java public class RedPenCore extends PenCorepublic class RedPenCore extends PenCore RedPenCore()RedPenCore()color=color=红色红色;public void writeWord(String s)public void writeWord(String s)System.out.println(System.out.println(写出写出+c

7、olor+color+的字的字:+s);:+s);2024/5/3 周五9模式的结构的描述与使用模式的结构的描述与使用 2 2具体产品(具体产品(ConcreteProductConcreteProduct)_2:_2:BluePenCore.java BluePenCore.java public class BluePenCore extends PenCorepublic class BluePenCore extends PenCore BluePenCore()BluePenCore()color=color=蓝色蓝色;public void writeWord(String s)p

8、ublic void writeWord(String s)System.out.println(System.out.println(写出写出+color+color+的字的字:+s);:+s);2024/5/3 周五10模式的结构的描述与使用模式的结构的描述与使用 2 2具体产品(具体产品(ConcreteProductConcreteProduct)_3:_3:BlackPenCore.java BlackPenCore.java public class BlackPenCore extends PenCorepublic class BlackPenCore extends PenC

9、ore BlackPenCore()BlackPenCore()color=color=黑色黑色;public void writeWord(String s)public void writeWord(String s)System.out.println(System.out.println(写出写出+color+color+的字的字:+s);:+s);2024/5/3 周五11模式的结构的描述与使用模式的结构的描述与使用 3 3构造者(构造者(CreatorCreator):BallPen.java BallPen.java public abstract class BallPenpu

10、blic abstract class BallPen BallPen()BallPen()System.out.println(System.out.println(生产了一只装有生产了一只装有+getPenCore().color+getPenCore().color+笔芯的圆珠笔笔芯的圆珠笔););public abstract PenCore getPenCore();/public abstract PenCore getPenCore();/工厂方法工厂方法 2024/5/3 周五124 4具体构造者(具体构造者(ConcreteCreatorConcreteCreator):Re

11、dBallPen.javaRedBallPen.javapublic class RedBallPen extends BallPenpublic class RedBallPen extends BallPen public PenCore getPenCore()public PenCore getPenCore()return new RedPenCore();return new RedPenCore();BlueBallPen.javaBlueBallPen.javapublic class BlueBallPen extends BallPenpublic class BlueBa

12、llPen extends BallPen public PenCore getPenCore()public PenCore getPenCore()return new BluePenCore();return new BluePenCore();BlackBallPen.javapublicclassBlackBallPenextendsBallPenpublicPenCoregetPenCore()returnnewBlackPenCore();2024/5/3 周五14模式的结构的描述与使用模式的结构的描述与使用 5 5应用应用 Application.javaApplication

13、java public class Applicationpublic class Application public static void main(String args)public static void main(String args)PenCore penCore;PenCore penCore;BallPen ballPen=new BlueBallPen();BallPen ballPen=new BlueBallPen();penCore=ballPen.getPenCore();penCore=ballPen.getPenCore();penCore.writeWo

14、rd(penCore.writeWord(你好你好,很高兴认识你很高兴认识你););ballPen=new RedBallPen();ballPen=new RedBallPen();penCore=ballPen.getPenCore();penCore=ballPen.getPenCore();penCore.writeWord(How are you);penCore.writeWord(How are you);ballPen=new BlackBallPen();ballPen=new BlackBallPen();penCore=ballPen.getPenCore();penCo

15、re=ballPen.getPenCore();penCore.writeWord(nice to meet you);penCore.writeWord(nice to meet you);三、三、工厂方法模式的优点工厂方法模式的优点 2024/5/3 周五15使用工厂方法可以让用户的代码和某个特定类的子类的代码解耦。工厂方法使用户不必知道它所使用的对象是怎样被创建的,只需知道该对象有哪些方法即可。四、适合使用工厂方法的情景用户需要一个类的子类的实例,但不希望与该类的子类形成耦合。用户需要一个类的子类的实例,但用户不知道该类有哪些子类可用。五、应用举例创建药品对象系统目前已经按着有关药品的规

16、定设计了一个抽象类Drug,该抽象类规定了所创建的药品必须给出药品的成分及其含量。Drug目前有两个子类:Paracetamol和Amorolfine。Paracetamol负责创建氨加黄敏一类的药品,Amorolfine负责创建盐酸阿莫罗芬一类的药品。一个为某药店开发的应用程序需要使用Drug类的某个子类的实例为用户提供药品,但是药店的应用程序不能使用Drug的子类的构造方法直接创建对象,因为药店没有能力给出药品的各个成分的含量,只有药厂才有这样的能力。/Drug.javapublic abstract class Drug String constitute;String name;pub

17、lic String getName()return name;public String getConstitute()return constitute;/Paracetamol.javapublic class Paracetamol extends Drug String part1=每粒含乙酰氨基酚;String part2=每粒含咖啡因;String part3=每粒含人工牛黄;String part4=每粒含马来酸氯苯;public Paracetamol(String name,int a)this.name=name;part1=part1+:+a0+毫克n;part2=pa

18、rt2+:+a1+毫克n;part3=part3+:+a2+毫克n;part4=part4+:+a3+毫克n;constitute=part1+part2+part3+part4;/Amorolfine.javapublic class Amorolfine extends Drug String part1=每粒含甲硝唑;String part2=每粒含人工牛黄;public Amorolfine(String name,int a)this.name=name;part1=part1+:+a0+毫克n;part2=part2+:+a1+毫克n;constitute=part1+part2;

19、/DrugCreator.javapublic interface DrugCreator public abstract Drug getDrug();/ParaDrugCreator.javapublic class ParaDrugCreator implements DrugCreator public Drug getDrug()int a=250,15,1,10;Drug drug=new Paracetamol(氨加黄敏胶囊,a);return drug;/AmorDrugCreator.javapublic class AmorDrugCreator implements Dr

20、ugCreator public Drug getDrug()int a=200,5;Drug drug=new Amorolfine(甲硝矬胶囊,a);return drug;/Application.javaimport java.util.*;public class Application public static void main(String args)DrugCreator creator=new ParaDrugCreator();Drug drug=creator.getDrug();System.out.println(drug.getName()+的成份:);Syst

21、em.out.println(drug.getConstitute();creator=new AmorDrugCreator();drug=creator.getDrug();System.out.println(drug.getName()+的成份:);System.out.println(drug.getConstitute();六、应用举例记录日志public interface Trace /turn on and off debugging public void setDebug(boolean debug);/write out a debug message public v

22、oid debug(String message);/write out an error message public void error(String message);public class FileTrace implements Trace private java.io.PrintWriter pw;private boolean debug;public FileTrace()throws java.io.IOException pw=new java.io.PrintWriter(new java.io.FileWriter(c:trace.log);public void

23、 setDebug(boolean debug)this.debug=debug;public void debug(String message)if(debug)/only print if debug is true pw.println(DEBUG:+message);pw.flush();public void error(String message)/always print out errors pw.println(ERROR:+message);pw.flush();public class SystemTrace implements Trace private bool

24、ean debug;public void setDebug(boolean debug)this.debug=debug;public void debug(String message)if(debug)/only print if debug is true System.out.println(DEBUG:+message);public void error(String message)/always print out errors System.out.println(ERROR:+message);SystemTrace log=new SystemTrace();/.cod

25、e.log.debug(entering loog);/.etc.public class TraceFactory public static Trace getTrace()return new SystemTrace();/.some code.Trace log=new TraceFactory.getTrace();/.code.log.debug(entering loog);/.etc.七、应用举例自动车工厂有一系列的自动车产品Bus(公交车),Truck(卡车);它们需要由不同的工厂生产,但具有相同的生产流程。为了以后扩展其他流水线,比如摩托车,我们需要一种柔软的方案来实现自动

26、车生产的过程。设计目标一方面,可以不用关心产品对象的具体实现,简化和统一Client调用过程;另一方面,可以让整个系统具有灵活的可扩展性,若要扩展生产摩托车的流水线,只要再实现一个摩托车类以及摩托车工厂类就行,而Client的调用方法完全不需改变。实现方法一abstractclassCarFactory/定义生产自动车生产的接口规范定义生产自动车生产的接口规范publicCarcreateCar();classBusFactoryextendsCarFactorypublicCarcreateCar()/生产公交车生产公交车returnnewCarBus();classTruckFactory

27、extendsCarFactorypublicCarcreateCar()/生产卡车生产卡车returnnewTruckBus();publicclassCarpublicStringgetType()returnCar;publicclassCarBusextendsCarpublicStringgetType()returnBus;publicclassCarTruckextendsCarpublicStringgetType()returnTruck;public class Client public static void main(String args)CarFactory fa

28、ctory=new BusFactory();/生产公交车 Car bus=factory.createCar();System.out.println(生产了:+bus.getType();factory=new TruckFactory();/生产卡车 Car truck=factory.createCar();System.out.println(生产了:+truck.getType();实现方法二classCarFactorypublicCarcreateCar(StringcarType)if(carType.equals(“BUS”)ReturnnewCarBus();if(carType.equals(“TRUCK”)ReturnnewCarTruck();public class Client public static void main(String args)CarFactory factory=new CarFactory();/生产公交车 Car bus=factory.createCar(“BUS”);System.out.println(生产了:+bus.getType();/生产卡车 Car truck=factory.createCar(“TRUCK”);System.out.println(生产了:+truck.getType();

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服