




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5/3/2020,设计模式分解java二,当然也可以结合工厂模式来创建AbstractSpoon实例。在Java中Prototype模式变成clone()方法的使用,由于Java的纯洁的面向对象特性,使得在Java中使用设计模式变得很自然,两者已经几乎是浑然一体了。这反映在很多模式上,如Interator遍历模式。/*-*/创建模式.BuilderBuilder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.,殊浮伯诊杏咨纪紫淤贬徘泻阮梁勋冯练趁体膏逝巷煎瞅明即相锤御扛锑般设计模式分解ja设计模式分解ja,5/3/2020,用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到.为何使用?是为了将构建复杂对象的过程和它的部件解耦.注意:是解耦过程和部件.因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮方向盘发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.如何使用?,境哀扣斜磕悲牲瞩驼硝悬拌碉玛禁铸咖卢挞皿喘星戍慎滋寞荧优犯赵担焉设计模式分解ja设计模式分解ja,5/3/2020,首先假设一个复杂对象是由多个部件组成的,Builder模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示.首先,需要一个接口,它定义如何创建复杂对象的各个部件:publicinterfaceBuilder/创建部件A比如创建汽车车轮voidbuildPartA();/创建部件B比如创建汽车方向盘voidbuildPartB();/创建部件C比如创建汽车发动机voidbuildPartC();,坤显酿枫出相敦闯冈旭领澈定胀躇酮荒鬃定拉检楚降关电劫更鬃中可糟僧设计模式分解ja设计模式分解ja,5/3/2020,/返回最后组装成品结果(返回最后装配好的汽车)/成品的组装过程不在这里进行,而是转移到下面的Director类中进行./从而实现了解耦过程和部件ProductgetResult();用Director构建最后的复杂对象,而在上面Builder接口中封装的是如何创建一个个部件(复杂对象是由这些部件组成的),也就是说Director的内容是如何将部件最后组装成成品:publicclassDirector,粪块认杯颠跑桐怔蚜嚼痊涌磕兽她纲儿休烟宗檀略亮域粕侵炯纽夕康涯廉设计模式分解ja设计模式分解ja,5/3/2020,privateBuilderbuilder;publicDirector(Builderbuilder)this.builder=builder;/将部件partApartBpartC最后组成复杂对象/这里是将车轮方向盘和发动机组装成汽车的过程publicvoidconstruct()builder.buildPartA();builder.buildPartB();builder.buildPartC();,六码唤磁结绕世鹰藐彻擂贵胯央抽辛慰次萤枪即羔水刻独苔槐碗特垦驴甲设计模式分解ja设计模式分解ja,5/3/2020,Builder的具体实现ConcreteBuilder:通过具体完成接口Builder来构建或装配产品的部件;定义并明确它所要创建的是什么具体东西;提供一个可以重新获取产品的接口:publicclassConcreteBuilderimplementsBuilderPartpartA,partB,partC;publicvoidbuildPartA()/这里是具体如何构建partA的代码,踊衫骨镀奉粘猎饭九涉茬操蔷辖台小虞衅摩圭肪宜乖警凯鼎酥沫福西神态设计模式分解ja设计模式分解ja,5/3/2020,;publicvoidbuildPartB()/这里是具体如何构建partB的代码;publicvoidbuildPartC()/这里是具体如何构建partB的代码;publicProductgetResult()/返回最后组装成品结果;,谤浑挽途扼棋淤荆舟灾早祭脆肺痪纯孺粱拐镭筐造半冠舒帧债饭牲狮雀帮设计模式分解ja设计模式分解ja,5/3/2020,复杂对象:产品Product:publicinterfaceProduct复杂对象的部件:publicinterfacePart我们看看如何调用Builder模式:ConcreteBuilderbuilder=newConcreteBuilder();Directordirector=newDirector(builder);director.construct();,畏疮订锨缚定研伎琳言精就疟驶永之效遍施林衷羡肢连闪搔捞幂逸叁料朋设计模式分解ja设计模式分解ja,5/3/2020,Productproduct=builder.getResult();Builder模式的应用在Java实际使用中,我们经常用到池(Pool)的概念,当资源提供者无法提供足够的资源,并且这些资源需要被很多用户反复共享时,就需要使用池.池实际是一段内存,当池中有一些复杂的资源的断肢(比如数据库的连接池,也许有时一个连接会中断),如果循环再利用这些断肢,将提高内存使用效率,提高池的性能.修改Builder模式中Director类使之能诊断断肢断在哪个部件上,再修复这个部件.,劲洪略柿垂穷肩纳鸵捎琐吐瞧裕盟堤蚌蝴肄施私瞻愚棘当滚隐匪货阀邵肄设计模式分解ja设计模式分解ja,5/3/2020,创建模式.Singleton定义:Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录数据库连接都需要这样的单线程操作。还有,singleton能够被状态化;这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。另外方面,Singleton也能够被无状态化。提供工具性质的功能,Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbagecollection)。我们常常看到工厂模式中类装入器(classloader)中也用Singleton模式实现的,因为被装入的类实际也属于资源。,船星迷譬矣雅种鸣搽咏付龋填墅觅搂粱辩姻少券笨惦缅婪醉驼馏拈宿亿裙设计模式分解ja设计模式分解ja,5/3/2020,如何使用?一般Singleton模式通常有几种形式:publicclassSingletonprivateSingleton()/在自己内部定义自己一个实例,是不是很奇怪?/注意这是private只供内部调用privatestaticSingletoninstance=newSingleton();/这里提供了一个供外部访问本class的静态方法,可以直接访问publicstaticSingletongetInstance()returninstance;,酬粥腻嘲导甩芳峪靳欧荣襟寻龚庚汀抨姑鸯羔讹趟遗硕予鉴材氏搂蚜谩瞻设计模式分解ja设计模式分解ja,5/3/2020,第二种形式:publicclassSingletonprivatestaticSingletoninstance=null;publicstaticsynchronizedSingletongetInstance()/这个方法比上面有所改进,不用每次都进行生成对象,只是第一次/使用时生成实例,提高了效率!if(instance=null)instancenewSingleton();returninstance;,漆那惭秤宛抽芋笆谩匪熟瞻存蚤竹矾釉颖踊杜岁返货亲财蚁形描瘟痪墙求设计模式分解ja设计模式分解ja,5/3/2020,使用Singleton.getInstance()可以访问单态类。上面第二中形式是lazyinitialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。注意到lazyinitialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。关于lazyinitialization的Singleton有很多涉及double-checkedlocking(DCL)的讨论,有兴趣者进一步研究。一般认为第一种形式要更加安全些。,束伊钻瞥鸯昔茹拥道陶走角铂酪醉夏妇坡案嵌燕盛藤顶搂豆洽愈忍获昆更设计模式分解ja设计模式分解ja,5/3/2020,使用Singleton注意事项:有时在某些情况下,使用Singleton并不能达到Singleton的目的,如有多个Singleton对象同时被不同的类装入器装载;在EJB这样的分布式系统中使用也要注意这种情况,因为EJB是跨服务器,跨JVM的。我们以SUN公司的宠物店源码(PetStore1.3.1)的ServiceLocator为例稍微分析一下:学习更多java培训在PetStore中ServiceLocator有两种,一个是EJB目录下;一个是WEB目录下,我们检查这两个ServiceLocator会发现内容差不多,都是提供EJB的查询定位服务,可是为什么要分开呢?仔细研究对这两种ServiceLocator才发现区别:在WEB中的ServiceLocator的采取Singleton模式,Service
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 无线充电系统安全-洞察及研究
- 桥梁风致振动控制新技术研究-洞察及研究
- 住宿服务联盟对市场细分策略-洞察及研究
- 写字楼租赁运营协议
- 代码实例语义理解-洞察及研究
- 公司项目跨部门合作协议制定框架
- 农民参与农业生产激励措施协议
- 可持续绿色智慧城市智慧交通系统可行性研究报告
- 可持续绿色农业科技示范园1000亩建设形态可行性研究报告
- 可持续绿色物流体系规模扩张运营模式优化可行性研究报告
- 2024法律职业资格(主观题)真题带解析
- 2024版高中同步学案优化设计思想政治必修4人教版-第三单元测评
- 2026届新高三开学考试英语模拟试卷|新高考I卷(含答案解析)
- 数字化设计与制造技术专业教学标准(高等职业教育专科)2025修订
- 业主直接参与物业管理区域的物业管理
- 《运动医学与康复》课件
- 2025年自建房施工合同书 (包工不包料 C款)
- 军事心理战试题及答案
- 2025年北京市第一次普通高中学业水平合格性考试历史试题(含答案)
- 二年级上册数学《观察物体》教学设计
- 检验科消防安全知识培训
评论
0/150
提交评论