资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
Builder 模式模式BuilderBuilder 模式定义模式定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.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(); BuilderBuilder 模式的应用模式的应用 在 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 比如 CPUvoid buildPartA();/组装部件 B 比如主板void buildPartB();/组装部件 C 比如硬盘void buildPartC();/返回最后组装成品结果 (返回最后组装好的电脑)/成品的组装过程不在这里进行,而是由组装师(Assembler)类完成的。/从而实现了过程和部件的分离Product getProduct();4、 定义电脑的组装师(Assembler)类:public class Assembler private Computer computer;public Assembler(Computer computer) /主要任务是装电脑this.computer = 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.getProduct(); /卖给我的电脑(商品)7、说明:A:代码只用来学习 Builder 模式,要运行的话,必须要做一点改动。B:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。因为每个人的电脑配置可能都是不同的。C:我们使用 Builer 是为了构建复杂对象的过程和它的部件解耦,也就是说将过程分的尽可能细,而且每一部分只用完成自己的功能即可(各司其职嘛)。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号