- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
建造者模式
????? 首先我们分析一下需求,奔驰、宝马都是一个产品,他们有共有的属性,牛叉公司关心的是单个模型的运行过程:奔驰模型A是先有引擎声音,然后再响喇叭;奔驰 模型B是先启动起来,然后再有引擎声音,这才是牛叉公司要关心的,那到我们老大这边呢,就是满足人家的要求,要什么顺序就立马能产生什么顺序的模型出来, 我就负责把老大的要求实现出来,而且还要是批量的,也就是说牛叉公司下单订购宝马A车模,我们老大马上就找我“生产一个这样的车模,启动完毕后,喇叭响一 下”,然后我们就准备开始批量生产这些模型。由我生产出N多个奔驰和宝马车辆模型,这些车辆模型的都有run()方法,但是具体到每一个模型的run() 方法中间的执行任务的顺序是不同的,老大说要啥顺序,我就给啥顺序,最终客户买走后只能是既定的模型。好,需求还是比较复杂,我们先一个一个的解决,先从 找一个最简单的切入点——产品类,每个车都是一个产品,如图11-1所示。 图11-1 汽车模型类图 ????? 类图比较简单,在CarModel中我们定义了一个setSequence方法,车辆模型的这几个动作要如何排布,是在这个ArrayList中定义的, 然后run()方法根据sequence定义的顺序完成指定的顺序动作,与我们上一章节介绍的模板方法模式是不是非常类似?好,我们先看CarModel 源代码,如代码清单11-1所示。 代码清单11-1 车辆模型的抽象类 ?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263publicabstractclassCarModel { ?//这个参数是各个基本方法执行的顺序 ?privateArrayListString sequence = newArrayListString(); ?//模型是启动开始跑了 ?protectedabstractvoidstart(); ?//能发动,那还要能停下来,那才是真本事 ?protectedabstractvoidstop(); ?//喇叭会出声音,是滴滴叫,还是哔哔叫 ?protectedabstractvoidalarm(); ?//引擎会轰隆隆地响,不响那是假的 ?protectedabstractvoidengineBoom(); ?//那模型应该会跑吧,别管是人推的,还是电力驱动,总之要会跑 ?final publicvoidrun() { ?//循环一边,谁在前,就先执行谁 ?for(inti=0;ithis.sequence.size();i++){ ?String actionName = this.sequence.get(i); ?if(actionName.equalsIgnoreCase(start)){ ?this.start(); //开启汽车 ?}elseif(actionName.equalsIgnoreCase(stop)){ ?this.stop(); //停止汽车 ?}elseif(actionName.equalsIgnoreCase(alarm)){ ?this.alarm(); //喇叭开始叫了 ?}elseif(actionName.equalsIgnoreCase(engine boom)){ //如果是engine boom关键字 ?this.engineBoom(); //引擎开始轰鸣 ?} ?} ?} ?//把传递过来的值传递到类内 ?final publicvoidsetSequence(ArrayListString sequence){ ?this.sequence = sequence; ?} ?} CarModel的设计原理是这样的,setSequence方法是允许客户自己设置一个顺序,是要先启动响一下喇叭再跑起来,还是要先响一下喇叭 再启动,对于一个具体的模型永远都固定的,但是对N多个模型就是动态的了。在子类中实现父类的基本方法,run()方法读取sequence,然后遍历 sequence中的字符串,哪个字符串在先,就先执行哪个方法。 两个实现类分别实现父类的基本方法,奔驰模型如代码清单11-2所示。 代码清单11-2 奔驰模型代码 ?123456789101112131415161718192021222324252627publicclassBenzModel extends CarModel { ?protectedvoidalarm() { ?System.out.println(奔驰车的喇叭声音是这个样子的...); ?} ?protectedvoiden
您可能关注的文档
- 7-11-chinese version.doc
- 口译中需要强记得单词............doc
- 强记词组.doc
- 反思经济学专题.doc
- 笔译二级.doc
- 常用口译词组.doc
- 《C++0x漫谈》系列之:右值引用(上).doc
- 高翻有用词组.doc
- 自主招生六0现代文阅读一.doc
- 例文封面部分.doc
- 湖北省荆州市沙市中学2025-2026学年高一上学期12月月考语文试题.docx
- 吉林省长春市第二实验中学2025-2026学年高二上学期11月期中考试数学含解析.docx
- 四川省字节精准教育联盟2026届高中毕业班第一次诊断性检测政治.docx
- 四川省字节精准教育联盟2026届高中毕业班第一次诊断性检测政治答案.docx
- 物理试卷(A卷)答案山西省三重教育2025-2026学年高二12月阶段性检测(12.17-12.18).docx
- 物理试卷(A卷)山西省三重教育2025-2026学年高二12月阶段性检测(12.17-12.18).docx
- Unit1Reading2课件牛津译林版七年级英语下册.pptx
- 物理试卷(A卷)答案浙江省2025学年第一学期浙江北斗星盟高二年级12月阶段性联考(12.18-12.19).docx
- 四川省字节精准教育联盟2026届高中毕业班第一次诊断性检测语文.docx
- Unit1MynamesGina第3课时考点讲解writing16张.pptx
最近下载
- DB62_T 5101-2025 公路绿化技术规范.docx VIP
- DB62T 1161-2022 机修梯田技术规范.docx VIP
- DB62T 4105-2020 村务公开规范.docx VIP
- DB62T 4894-2024 花椒农业气象观测规范.docx VIP
- DB62T 3152-2018 兰州市屋顶绿化技术标准.docx VIP
- 规范《GB29450-2012-玻璃纤维单位产品能源消耗限额》.pdf
- 法院书记员招聘2025年笔试重点考点大全.docx
- 海尔一键恢复.doc VIP
- 2025年黑河嫩江市公开招聘林场管护工作者135人考试备考题库及答案解析.docx VIP
- DBJ08-232-98 道路交通管理设施施工及验收规程.docx VIP
原创力文档


文档评论(0)