预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

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

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

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

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

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

设计模式----Builder(生成器)模式 GoF:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder模式与AbsrtactFactory模式非常像。GoF指出,他们二者的主要区别就在于Builder模式遵循一定的步骤一步一步创建对象。 Builder模式是为了将构建复杂对象的过程和他的部件相分离。因为一个复杂的对象不但有很多大量的组成部分,还有很多小的零件。他(复杂对象)本身要靠这些部件和零件来组装。例如:一座房子,它有很多部件:房间、窗户;还有门窗上的锁和窗户上的插销等小零件。Builder模式的目的就是为了将部件(门、窗等)和组装过程(整个房子的建造)分开。 现在假设一个房子有多个部件组成的,Builder模式的目的是把复杂对象的创建和部件的创建分别开来。分别用Builder类和Director类来表示。 下面以建造房子为例: 首先定义一个抽象类,它定义如何创建复杂对象的各个部件 packageBuilder; publicabstractclassHouseBuilder { publicabstractvoidBuildRoom(introomNo);//构建房间 publicabstractvoidBuildDoor(introom1,introom2);//构建门 //得到最后的房屋 publicabstractHousegetHouse(); }//endabstractclassHouseBuilder 用Director构建复杂对象(房子): packageBuilder; publicclassHouseDirector { publicvoidcreateHouse(HouseBuilderconcreteBuilder) { concreteBuilder.buildRoom(2); concreteBuilder.buildDoor(3); }//endcreateHouse(...) }//endclassHouseDirector Builder的具体实现ConcreteHouseBuilder:通过完成Builder来构建产品(房子)的部件 packageBuilder; publicclassConcreteHouseBuilderextendsHouseBuilder { privateHousehouse; publicConcreteHouseBuilder() { house=newHouse(); }//endConcreteHouseBuilder() //创建屋子的数量 publicvoidbuildRoom(introomNumber) { house.roomNumber=roomNumber; }//endBuildRoom //创建门的数量 publicvoidbuildDoor(intdoorNumber) { house.doorNumber=doorNumber; } //返回创建好的房屋 publicHousegetHouse() { returnhouse; }//endgetHouse() }//endclassConcreteHouseBuildera 具体的屋子: packageBuilder; publicclassHouse { introomNumber; intdoorNumber; publicHouse() { roomNumber=0; doorNumber=0; }//endHouse() publicintgetRoomNumber() { returnroomNumber; }//endgetRoomNumber() publicintgetDoorNumber() { returndoorNumber; }//endgetDoorNumber() }//endclassHouse Builder模式的具体运用: /* *BuilderPattern.java * *Createdon2006年3月28日,下午10:01 * *Tochangethistemplate,chooseTools|TemplateManager *andopenthetemplateintheeditor. */ packageBuilder; /** * *@authorAdministrator */ publicclassBuilderPattern { Househouse; ConcreteHouseBuilderhouseBuilder; HouseDirectorhouseDirecor; publicBuilderPattern() { house=n