4Builder(生成器)-设计模式.pdf
上传人:qw****27 上传时间:2024-09-11 格式:PDF 页数:4 大小:251KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

4Builder(生成器)-设计模式.pdf

4Builder(生成器)-设计模式.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到.建造者模式的优点为何使用?是为了将构建复杂对象的过程和它的部件解耦.注意:是解耦过程和部件.因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮方向盘发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.生成器模式属于对象结构型模式,其意图是将一个复杂对象的构建与他的表示分离,使得同样的构建创建过程可以创建不同的表示。当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时当构造过程必须允许被构造的对象有不同的表示时。生成器Builder:接口一构造和装配该产品的各个部件。Checken,pig创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终的产品。当客户需要一个产品时,把需要的参数传递个导向器,导向器根据传递的参数调用具体的生成器,具体的生成器通过一系列的操作(getAnimal()通过调用其它的接口方法实现)最会返回一个产品。Bridge模式的优点:1.它使你可以改变一个产品的内部表示,Builder对象提供给导向器一个构造产品的抽象接口,该接口使得生成器可以隐藏这个产品的表示和内部结构,他同时也隐藏了该产品是如何装配的,因为产品时通过抽象接口构造的(注:本例子把接口的实现放在具体类中了),你在改变该产品的内部表示时所要做的只是定义一个新的生成器。2.他将构造代码和表示代码分开,这有点类似于模板模式。所不同的是模版模式最终是完成复杂的工作,而生成器的目的是要生成一个复杂的对象。3.他使得你对构造过程进行更加精细的控制。Builder模式是在导向者的控制下一步一步构造产品的,仅当该产品完成时,导向者才从生成器中取回产品。因此Builder模式能更好的反映产品的构造过程,使你可以更精细的控制构建过程,从而能更精细的控制所的产品的内部结构。代码示例:AnimalBuilder:代码packagebuilder;publicinterfaceAnimalBuilder{publicvoidbuildName();publicvoidbuildLegs();publicvoidbuildMeat();publicAnimalgetAnimal();}ChickenBuilder的代码:packagebuilder;publicclassChickenBuilderimplementsAnimalBuilder{privateAnimalchicken=null;publicChickenBuilder(){chicken=newAnimal();}publicvoidbuildName(){chicken.setName("chicken");}publicvoidbuildLegs(){chicken.setLegs(2);}publicvoidbuildMeat(){chicken.setMeat("chicken");}publicAnimalgetAnimal(){buildName();buildLegs();buildMeat();returnchicken;}}Animal代码:packagebuilder;publicclassAnimal{privateStringname;privateStringmeat;privateintlegs;publicStringgetName(){returnname;}publicStringgetMeat(){returnmeat;}publicintgetLegs(){returnlegs;}publicvoidsetName(StringaName){name=aName;}publicvoidsetMeat(StringaMeat){meat=aMeat;}publicvoidsetLegs(intalegs){legs=alegs;}}Director代码:packagebuilder;publicclassDirector{publicAnimalgetAnimal(StringaName