设计模式学习之建造者模式.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计模式学习之建造者模式

跟JBPM学设计模式之建造者模式 模式简介 建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 一个产品常常会有不同的组成成分作为零部件,这些零件可能是对象,也可能不是对象,他们通常由叫做产品的内部表象。不同的产品可以有不同的内部表象,也就是不同的零部件。使用建造者模式可以使客户端不需要知道所生成的产品对象有哪些零部件,每个产品的相应零部件有什么不同,是怎么建造出来的,以及是怎样组成产品的。建造者模式的简图如下 图 1. 建造者模式结构图 在这个示意图中,最终产品是由两部分组成的,所以相应的建造方法也有两个。这个模式涉及到一下四个角色。 抽象建造者角色:给出一个接口,规范产品对象的各个组成部分的建造。一般而言此接口独立于应用程序的商业逻辑。模式中直接创建产品的具体建造者,必须实现这个接口所要求的两种方法,一种是建造方法,比如图中BuildPart1()和BuildPart2;另外一种是结果返回方法,即图中的GetProduct()。一般来说产品所包含的零部件数目与建造方法的数目相符。 具体建造者角色:担任这个角色的是与应用程序紧密相关的一些类,他们在应用程序调用下创建产品的实例。其需要完成任务包括: 实现抽象建造者builder所声明的接口,给出一步一步创建产品实例的操作。 建造过程完成后,提供产品的实例。 导演者角色:其调用具体的建造者角色以创建产品对象。应当指出的是,导演者角色并没有产品类的具体知识,真正具有与产品类具体知识的是具体的建造者角色。 产品角色:产品就是模式中要建造的复杂对象。 导演者角色是与客户端打交道的角色。导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但是却不为客户端所知。 一般而言,每有一个产品类,就有一个相应的具体建造者类。这些产品应当有一定数目的零件,而每有一个两件就相应的在所有建造者橘色里有一个建造方法。 JBPM中的建造者模式 对于这个模式,虽然JBPM中提供了几个亿builder结尾的类,但是这些类并没有在代码中使用,同时也不是很适合建造者模式应用的场景。最终选择的JBPM中获取缓存对象部分的代码实现,虽然从代码的意图符合建造者模式,但是并不完美还是有一些差距的。如果您觉得看不懂或者不正确,可以参考其他设计模式给出的实例代码。 图 2. JBPM中的建造者模式 我们知道JBPM自己实现了一套IOC,这套IOC为延迟加载全局对象、缓存全局对象、获取全局对象提供了便捷的方式。下面我们以Hibernate中Configuration为例,来说明这个模式的实现。 导演者角色:Context、Environment、ProcessEngine三者都提供了获取产品的接口,我们可以通过产品对象的类型或者名称来获取。 public interface Context { Object get(String key); T T get(ClassT type); } public interface Environment { /** * searches a named object in all the contexts in the default search order. * @return the object if it exists in the environment, codenull/code if there is no object with the given name in the environment. */ public abstract Object get(String name); /** searches an object based on type. The search doesn take superclasses of the context elements * into account. * @return the first object of the given type or null in case no such element was found. */ public abstract T T get(ClassT type); } public interface ProcessEngine { /** retrieve and object defined in the process engine by type */ T T get(ClassT type); /** retrieve and object defined in the process engine by name */ Object g

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档