理解java设计模式之建造者模式
建造者模式(BuilderPattern)主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。因此,建造者模式主要用来解决“对象部分”的需求变化。这样可以对对象构造的过程进行更加精细的控制。
packagecom.shejimoshi.create.Builder; /** *功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 *适用性: *当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时 *当构造过程必须允许被构造的对象有不同的表示时 */ publicabstractclassPersonBuilder { //绘画一个人物需要使用到的工具 protectedStringtool1; protectedStringtool2; publicPersonBuilder(Stringt1,Stringt2) { this.tool1=t1; this.tool2=t2; } //绘画头 publicabstractvoidbuildHead(); //画身体 publicabstractvoidbuildBody(); //画左脚右脚 publicabstractvoidbuildArmLeft(); publicabstractvoidbuildArmRight(); //画左手右手 publicabstractvoidbuildLegLeft(); publicabstractvoidbuildLegRight(); }
我们的抽象生成器派生出相应的子类,用来构造相应的实际使用类型
packagecom.shejimoshi.create.Builder; /** *功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 *适用性: *当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时 *当构造过程必须允许被构造的对象有不同的表示时 */ publicclassPersonThinBuilderextendsPersonBuilder { publicPersonThinBuilder(Stringt1,Stringt2) { super(t1,t2); } @Override publicvoidbuildHead() { System.out.println("画出一个瘦子的头"); } @Override publicvoidbuildBody() { System.out.println("画出一个瘦子的身体"); } @Override publicvoidbuildArmLeft() { System.out.println("画出瘦子的左臂"); } @Override publicvoidbuildArmRight() { System.out.println("画出瘦子的右臂"); } @Override publicvoidbuildLegLeft() { System.out.println("画出瘦子左腿"); } @Override publicvoidbuildLegRight() { System.out.println("画出瘦子的右腿"); } }
packagecom.shejimoshi.create.Builder; /** *功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 *适用性: *当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时 *当构造过程必须允许被构造的对象有不同的表示时 */ publicclassPersonFatBuilderextendsPersonBuilder { publicPersonFatBuilder(Stringt1,Stringt2) { super(t1,t2); } @Override publicvoidbuildHead() { System.out.println("画出一个胖子的头"); } @Override publicvoidbuildBody() { System.out.println("画出一个胖子的身体"); } @Override publicvoidbuildArmLeft() { System.out.println("画出胖子的左臂"); } @Override publicvoidbuildArmRight() { System.out.println("画出胖子的右臂"); } @Override publicvoidbuildLegLeft() { System.out.println("画出胖子左腿"); } @Override publicvoidbuildLegRight() { System.out.println("画出胖子的右腿"); } }
我们的生成器交给指挥者来实现创建的动作
packagecom.shejimoshi.create.Builder; /** *功能:创建人物的指挥者 */ publicclassPersonDirector { privatePersonBuilderpb; //传递相应的人物创建模型 publicPersonDirector(PersonBuilderpber) { this.pb=pber; } //创建一个人 publicvoidcreatePerson() { pb.buildHead(); pb.buildBody(); pb.buildArmLeft(); pb.buildArmRight(); pb.buildLegLeft(); pb.buildLegRight(); } }
测试案例:
packagecom.shejimoshi.create.Builder; /** *功能:客户端程序 */ publicclassTest { //创建相应的人物 publicstaticvoidcreate(PersonBuilderpb) { //借助参数传过来的模型创建相应的对象 PersonDirectorpd=newPersonDirector(pb); pd.createPerson(); } publicstaticvoidmain(String[]args) { PersonThinBuilderptb=newPersonThinBuilder("图像工具","画笔"); create(ptb);//创建一个瘦子 System.out.println("=============================================================="); PersonFatBuilderpfb=newPersonFatBuilder("图像工具","画笔"); create(pfb); } }
运行结果:
画出一个瘦子的头 画出一个瘦子的身体 画出瘦子的左臂 画出瘦子的右臂 画出瘦子左腿 画出瘦子的右腿 ============================================================== 画出一个胖子的头 画出一个胖子的身体 画出胖子的左臂 画出胖子的右臂 画出胖子左腿 画出胖子的右腿
以上就是java建造者模式,希望对大家学习java程序设计有所帮助。