全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Builder模式Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到.为何使用?是为了将构建复杂对象的过程和它的部件解耦.注意: 是解耦过程和部件.因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮 方向盘 发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.如何使用?首先假设一个复杂对象是由多个部件组成的,Builder模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示.首先,需要一个接口,它定义如何创建复杂对象的各个部件:public interface Builder /创建部件A比如创建汽车车轮void buildPartA(); /创建部件B 比如创建汽车方向盘void buildPartB(); /创建部件C 比如创建汽车发动机void buildPartC(); /返回最后组装成品结果 (返回最后装配好的汽车)/成品的组装过程不在这里进行,而是转移到下面的Director类中进行./从而实现了解耦过程和部件Product getResult(); 用Director构建最后的复杂对象,而在上面Builder接口中封装的是如何创建一个个部件(复杂对象是由这些部件组成的),也就是说Director的内容是如何将部件最后组装成成品:public class Director private Builder builder; public Director( Builder builder ) this.builder = builder; / 将部件partA partB partC最后组成复杂对象/这里是将车轮 方向盘和发动机组装成汽车的过程public void construct() builder.buildPartA();builder.buildPartB();builder.buildPartC(); Builder的具体实现ConcreteBuilder:通过具体完成接口Builder来构建或装配产品的部件;定义并明确它所要创建的是什么具体东西;提供一个可以重新获取产品的接口:public class ConcreteBuilder implements Builder Part partA, partB, partC; public void buildPartA() /这里是具体如何构建partA的代码; public void buildPartB() /这里是具体如何构建partB的代码; public void buildPartC() /这里是具体如何构建partB的代码; public Product getResult() /返回最后组装成品结果; 复杂对象:产品Product:public interface Product 复杂对象的部件:public interface Part 我们看看如何调用Builder模式:ConcreteBuilder builder = new ConcreteBuilder();Director director = new Director( builder ); director.construct(); Product product = builder.getResult(); Builder模式的应用在Java实际使用中,我们经常用到池(Pool)的概念,当资源提供者无法提供足够的资源,并且这些资源需要被很多用户反复共享时,就需要使用池.池实际是一段内存,当池中有一些复杂的资源的断肢(比如数据库的连接池,也许有时一个连接会中断),如果循环再利用这些断肢,将提高内存使用效率,提高池的性能.修改Builder模式中Director类使之能诊断断肢断在哪个部件上,再修复这个部件.设计模式之Builder购机篇最近想买一台电脑用于学习,因此我就去了一家电脑公司,经过分析,选用了下面的配置:CPU P2.4主板 Intel硬盘 80G。买过电脑的朋友可能都知道,我们选好配置后,电脑公司就会有专门的组装师(Assembler)来给我们装机。电脑(Computer)就是由这些东西(我们称之为Part)组成的。学过经济学的朋友可能都知道,如果这台组装好的电脑不卖掉,那它就不是商品(Commodity),而仅仅是台电脑而已。1、 在这里,我们先定义商品(Commodity)类:public class Commodity String commodity =; public Commodity (Part partA,Part partB,Part partC) /由各个部分组成 this. commodity = partA.part+n; this. commodity = product+partB.part+n; this. commodity = product+partC.part; System.out.println(我的机器配置为:n+ commodity); 2、 下来我们再定义电脑的组成部分(Part)类:public class Part String part=; public Part(String part) this.part = part; 3、 我们把电脑(Computer)定义成一个接口类:public interface Computer /组装部件A比如CPU void buildPartA();/组装部件B 比如主板 void buildPartB(); /组装部件C 比如硬盘 void buildPartC();/返回最后组装成品结果 (返回最后组装好的电脑)/成品的组装过程不在这里进行,而是由组装师(Assembler)类完成的。/从而实现了过程和部件的分离 Product getProduct();4、 定义电脑的组装师(Assembler)类:public class Assembler private Computer computer; public Assembler(Computer computer) /主要任务是装电脑 puter = computer; / 将部件partA partB partC最后组成复杂对象/这里是将主板、CPU和硬盘组装成PC的过程 public void construct() computer.buildPartA(); computer.buildPartB(); computer.buildPartC(); 5、 我的电脑是对电脑(Computer)接口的具体实现,因此再定义MyComputer实现类:public class MyComputer implements Computer Part partA, partB, partC; public void buildPartA() partA = new Part(P42.4 CPU); public void buildPartB() partB = new Part(Inter 主板); public void buildPartC() partC = new Part(80G硬盘); public Product getProduct() /返回最后组装成品结果 Commodity myComputer = new Commodity (partA,partB,partC); return myComputer; 6、 编写测试类:public class MyComputerTest public static void main(String args) MyComputer myComputer = new MyComputer(); /组装我的电脑 Assembler assembler = new Assembler( myComputer ); /派某一位组装师 assembler.construct(); /组装师进行组装过程 Commodity commodity = myComputer.getPro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古自治区阿拉善盟2025-2026学年高二上化学期末综合测试试题含解析
- 内蒙古乌兰察布市集宁区集宁一中2025年高二上化学期末检测模拟试题含解析
- 2025年广西防城港市化学高二上期末预测试题含解析
- 湖南城市学院《小学数学教学技能训练》2024-2025学年第一学期期末试卷
- 吉林省白山市抚松县六中2026届高二数学第一学期期末考试试题含解析
- 病窦综合征诊疗精要
- 牙周病诊疗流程规范
- 全麻醉监测护理规范
- 气管癌放疗后护理措施
- 放射科CT扫描前准备注意事项
- 环境消毒效果评估方案制度规定
- MOOC 创业基础-暨南大学 中国大学慕课答案
- SWITCH 勇者斗恶龙11S 金手指 版本:v1.0.3 最大金币 最大迷你奖章 32倍经验 最大攻击 所有材料
- 软件开发综合实训
- 乳房整形术详细分析
- 电气控制与plc应用技术课件
- Q-CR 783.1-2021 铁路通信网络安全技术要求 第1部分:总体技术要求
- GB/T 19000-2016质量管理体系基础和术语
- (最新)中原活塞岗位说明书(精)
- 北师大版六年级数学上册全套试卷
- APQPProcess前期产品质量策划过程概述
评论
0/150
提交评论