建造者模式,用于分离复杂对象的创建和表示。有些对象由很多部分组成,每个部分可以有很多不同的选项。在创建此类对象时,通常需要考虑使用构建器模式。比如一辆汽车是由发动机、方向盘、大灯、前大灯、车身颜色等组成的,每辆车的颜色、轮毂尺寸、大灯款式可能都不一样,但汽车的构成不会少。构建模式有两种实现方式。第一种方式是有导演,第二种方式是没有导演。根据我的经验,directorless方式的日常使用可能会稍微多一些。有导演。所谓director就是通过一个director类来指挥??对象创建的过程。客户端使用director类获取对象,不需要关心对象的具体创建过程。先看UML图,对构建模型有个大概的了解。下面看一下具体的代码,我们以造车为例Car{"+"wheel='"+wheel+'\''+",engine='"+engine+'\''+",seat='"+seat+'\''+",lamp='"+lamp+'\''+",color='"+color+'\''+'}';}}AbstractBuilder类,指定构建复杂对象的步骤();publicabstractvoidbuildEngine();publicabstractvoidbuildEngine(););}ConcreteBuilder类,实现复杂对象的具体构建过程和内容(){car??.setSeat("seat");}@OverridepublicvoidbuildLamp(){car.setLamp("lamp");}@OverridepublicvoidbuildColor(){car.setColor("color");}@OverridepublicvoidbuildEngine(){car.setEngine("engine");}//返回构建好的汽车模型@OverridepublicCargetCar(){returncar;}}Director类决定了复杂对象的创建过程publicclassCarDirector{publicCarcreateCar(Builderbuilder){builder.buildWheel();builder.buildSeat();builder.buildLamp();builder.buildColor();builder.buildEngine();returnbuilder.getCar();}}客户端使用publicclassBuilderClient{publicstaticvoidmain(String[]args){CarDirectorcarDirector=newCarDirector();//通过Director创建具体对象,不用关心对象创建过程Carcar=carDirector.createCar(newConcreteBuilder());System.out.println(car.toString());}}NodirectorNodirector模式在日常开发中似乎用的比较多,但是只要看到这样的代码,大概率是builder模式。Carcar=concreteBuilderA.buildEngine("engine").buildLamp("lamp").buildSeat("seat").buildColor("color")//.buildWheel("wheel").build();看老规矩先看一下UML图,有一个整体的认识。我们也来看看具体的代码实现。下面以创建汽车为例,Car的代码就不重复给出了。Builder类publicabstractclassBuilderA{//返回builder本身的对象。publicclassConcreteBuilderAextendsBuilderA{privateCarcar;publicConcreteBuilderA(){car=newCar();}@OverrideBuilderAbuildWheel(Stringwheel){car.setWheel(wheel);returnthis;}@OverrideBuilderAbuildEngine(Stringengine){car.setEngine("engine");returnthis;}@OverrideBuilderAbuildLamp(Stringlamp){car.setLamp("lamp");returnthis;}@OverrideBuilderAbuildSeat(Stringseat){car.setSeat("seat");returnthis;}@OverrideBuilderAbuildColor(Stringcolor){car.setColor("color");returnthis;}@OverrideCarbuild(){returncar;}}客户端使用publicclassBuilderAClient{publicstaticvoidmain(String[]args){ConcreteBuilderAconcreteBuilderA=newConcreteBuilderA();Carcar=concreteBuilderA.buildEngine("engine").buildLamp("lamp")。buildSeat("seat").buildColor("color")//.buildWheel("wheel").build();System.out.println(car.toString());}}总结构建器模式是一种创建型模式其一,所谓无Director模式,只是将构建过程交给客户端,让用户自己决定如何创建对象。directorless模式的实现关键在于Builder类中构建各个组件的方法返回的是Builder本身。
