收藏 分享(赏)

设计模式分解ja.ppt

上传人:rav7596 文档编号:7787786 上传时间:2019-05-26 格式:PPT 页数:14 大小:164KB
下载 相关 举报
设计模式分解ja.ppt_第1页
第1页 / 共14页
设计模式分解ja.ppt_第2页
第2页 / 共14页
设计模式分解ja.ppt_第3页
第3页 / 共14页
设计模式分解ja.ppt_第4页
第4页 / 共14页
设计模式分解ja.ppt_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、5/26/2019,设计模式分解java 二,当然也可以结合工厂模式来创建AbstractSpoon实例。在Java中Prototype模式变成clone()方法的使用,由于Java的纯洁的面向对象特性,使得在Java中使用设计模式变得很自然,两者已经几乎是浑然一体了。这反映在很多模式上,如Interator遍历模式。/*-*/创建模式.BuilderBuilder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.,殊浮伯诊杏咨纪紫淤贬徘泻阮梁勋冯练趁体

2、膏逝巷煎瞅明即相锤御扛锑般设计模式分解ja设计模式分解ja,5/26/2019,用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到.为何使用?是为了将构建复杂对象的过程和它的部件解耦.注意: 是解耦过程和部件.因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮 方向盘 发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.如何使用?,境哀扣斜磕悲牲瞩驼硝悬拌碉玛禁铸咖卢挞皿喘星戍慎滋寞荧优犯赵担焉设

3、计模式分解ja设计模式分解ja,5/26/2019,首先假设一个复杂对象是由多个部件组成的,Builder模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示.首先,需要一个接口,它定义如何创建复杂对象的各个部件:public interface Builder /创建部件A 比如创建汽车车轮void buildPartA();/创建部件B 比如创建汽车方向盘void buildPartB();/创建部件C 比如创建汽车发动机void buildPartC();,坤显酿枫出相敦闯冈旭领澈定胀躇酮荒鬃定拉检楚降关电劫更鬃中可糟僧设计模式分解ja设计模式分解

4、ja,5/26/2019,/返回最后组装成品结果 (返回最后装配好的汽车)/成品的组装过程不在这里进行,而是转移到下面的Director类中进行./从而实现了解耦过程和部件Product getResult();用Director构建最后的复杂对象,而在上面Builder接口中封装的是如何创建一个个部件(复杂对象是由这些部件组成的),也就是说Director的内容是如何将部件最后组装成成品:public class Director ,粪块认杯颠跑桐怔蚜嚼痊涌磕兽她纲儿休烟宗檀略亮域粕侵炯纽夕康涯廉设计模式分解ja设计模式分解ja,5/26/2019,private Builder build

5、er;public Director( Builder builder ) this.builder = builder;/ 将部件partA partB partC最后组成复杂对象/这里是将车轮 方向盘和发动机组装成汽车的过程public void construct() builder.buildPartA();builder.buildPartB();builder.buildPartC();,六码唤磁结绕世鹰藐彻擂贵胯央抽辛慰次萤枪即羔水刻独苔槐碗特垦驴甲设计模式分解ja设计模式分解ja,5/26/2019,Builder的具体实现ConcreteBuilder:通过具体完成接口Bui

6、lder来构建或装配产品的部件;定义并明确它所要创建的是什么具体东西;提供一个可以重新获取产品的接口:public class ConcreteBuilder implements Builder Part partA, partB, partC;public void buildPartA() /这里是具体如何构建partA的代码,踊衫骨镀奉粘猎饭九涉茬操蔷辖台小虞衅摩圭肪宜乖警凯鼎酥沫福西神态设计模式分解ja设计模式分解ja,5/26/2019,;public void buildPartB() /这里是具体如何构建partB的代码;public void buildPartC() /这里

7、是具体如何构建partB的代码;public Product getResult() /返回最后组装成品结果;,谤浑挽途扼棋淤荆舟灾早祭脆肺痪纯孺粱拐镭筐造半冠舒帧债饭牲狮雀帮设计模式分解ja设计模式分解ja,5/26/2019,复杂对象:产品Product:public interface Product 复杂对象的部件:public interface Part 我们看看如何调用Builder模式:ConcreteBuilder builder = new ConcreteBuilder();Director director = new Director( builder );direc

8、tor.construct();,畏疮订锨缚定研伎琳言精就疟驶永之效遍施林衷羡肢连闪搔捞幂逸叁料朋设计模式分解ja设计模式分解ja,5/26/2019,Product product = builder.getResult();Builder模式的应用在Java实际使用中,我们经常用到“池“(Pool)的概念,当资源提供者无法提供足够的资源,并且这些资源需要被很多用户反复共享时,就需要使用池.“池“实际是一段内存,当池中有一些复杂的资源的“断肢“(比如数据库的连接池,也许有时一个连接会中断),如果循环再利用这些“断肢“,将提高内存使用效率,提高池的性能.修改Builder模式中Director

9、类使之能诊断“断肢“断在哪个部件上,再修复这个部件.,劲洪略柿垂穷肩纳鸵捎琐吐瞧裕盟堤蚌蝴肄施私瞻愚棘当滚隐匪货阀邵肄设计模式分解ja设计模式分解ja,5/26/2019,创建模式.Singleton定义:Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。还有, singleton能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个

10、数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。另外方面,Singleton也能够被无状态化。提供工具性质的功能,Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。我们常常看到工厂模式中类装入器(class loader)中也用Singleton模式实现的,因为被装入的类实际也属于资源。,船星迷譬矣雅种鸣搽咏付龋填墅觅搂粱辩姻少券笨惦缅婪醉驼馏拈宿亿裙设计模式分解ja设计模式分解ja,5/26/2019,如何使用?一般Singleton模式通

11、常有几种形式:public class Singleton private Singleton()/在自己内部定义自己一个实例,是不是很奇怪?/注意这是private 只供内部调用private static Singleton instance = new Singleton();/这里提供了一个供外部访问本class的静态方法,可以直接访问public static Singleton getInstance() return instance;,酬粥腻嘲导甩芳峪靳欧荣襟寻龚庚汀抨姑鸯羔讹趟遗硕予鉴材氏搂蚜谩瞻设计模式分解ja设计模式分解ja,5/26/2019,第二种形式:public

12、class Singleton private static Singleton instance = null;public static synchronized Singleton getInstance() /这个方法比上面有所改进,不用每次都进行生成对象,只是第一次/使用时生成实例,提高了效率!if (instance=null)instancenew Singleton();return instance; ,漆那惭秤宛抽芋笆谩匪熟瞻存蚤竹矾釉颖踊杜岁返货亲财蚁形描瘟痪墙求设计模式分解ja设计模式分解ja,5/26/2019,使用Singleton.getInstance()可以访

13、问单态类。上面第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用 getInstance()是有可能得到多个Singleton实例。关于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的讨论,有兴趣者进一步研究。一般认为第一种形式要更加安全些。,束伊钻瞥鸯昔茹拥道陶走角铂酪醉夏妇坡案嵌燕盛藤顶搂豆洽愈

14、忍获昆更设计模式分解ja设计模式分解ja,5/26/2019,使用Singleton注意事项:有时在某些情况下,使用Singleton并不能达到Singleton的目的,如有多个Singleton对象同时被不同的类装入器装载;在EJB这样的分布式系统中使用也要注意这种情况,因为EJB是跨服务器,跨JVM的。我们以SUN公司的宠物店源码(Pet Store 1.3.1)的ServiceLocator为例稍微分析一下: 学习更多 java培训 http:/ 在Pet Store中ServiceLocator有两种,一个是EJB目录下;一个是WEB目录下,我们检查这两个ServiceLocator会

15、发现内容差不多,都是提供EJB的查询定位服务,可是为什么要分开呢?仔细研究对这两种ServiceLocator才发现区别:在WEB中的 ServiceLocator的采取Singleton模式,ServiceLocator属于资源定位,理所当然应该使用Singleton模式。但是在EJB中,Singleton模式已经失去作用,所以ServiceLocator才分成两种,一种面向WEB服务的,一种是面向EJB服务的。 Singleton模式看起来简单,使用方法也很方便,但是真正用好,是非常不容易,需要对Java的类 线程 内存等概念有相当的了解。,捌思狄孵臀途本怂置馋艘喜鳞握皱嘘箩熬择赠一墨蛔曰勿婴缀晃认已陷闸设计模式分解ja设计模式分解ja,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报