理解java设计模式之建造者模式

2017年04月10日 未分类 暂无评论

建造者模式(Builder Pattern)主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。因此, 建造者模式主要用来解决“对象部分”的需求变化。 这样可以对对象构造的过程进行更加精细的控制。

package com.shejimoshi.create.Builder;/*** 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示*适用性:*当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时*当构造过程必须允许被构造的对象有不同的表示时*/public abstract class PersonBuilder{//绘画一个人物需要使用到的工具protected String tool1;protected String tool2;public PersonBuilder(String t1, String t2){this.tool1 = t1;this.tool2 = t2;}//绘画头public abstract void buildHead();//画身体public abstract void buildBody();//画左脚右脚public abstract void buildArmLeft();public abstract void buildArmRight();//画左手右手public abstract void buildLegLeft();public abstract void buildLegRight();}

我们的抽象生成器派生出相应的子类,用来构造相应的实际使用类型

package com.shejimoshi.create.Builder;/*** 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示*适用性:*当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时*当构造过程必须允许被构造的对象有不同的表示时*/public class PersonThinBuilder extends PersonBuilder{public PersonThinBuilder(String t1, String t2){super(t1, t2);}@Overridepublic void buildHead(){System.out.println("画出一个瘦子的头");}@Overridepublic void buildBody(){System.out.println("画出一个瘦子的身体");}@Overridepublic void buildArmLeft(){System.out.println("画出瘦子的左臂");}@Overridepublic void buildArmRight(){System.out.println("画出瘦子的右臂");}@Overridepublic void buildLegLeft(){System.out.println("画出瘦子左腿");}@Overridepublic void buildLegRight(){System.out.println("画出瘦子的右腿");}}
package com.shejimoshi.create.Builder;/*** 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示* 适用性:*当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时*当构造过程必须允许被构造的对象有不同的表示时*/public class PersonFatBuilder extends PersonBuilder{public PersonFatBuilder(String t1, String t2){super(t1, t2);}@Overridepublic void buildHead(){System.out.println("画出一个胖子的头");}@Overridepublic void buildBody(){System.out.println("画出一个胖子的身体");}@Overridepublic void buildArmLeft(){System.out.println("画出胖子的左臂");}@Overridepublic void buildArmRight(){System.out.println("画出胖子的右臂");}@Overridepublic void buildLegLeft(){System.out.println("画出胖子左腿");}@Overridepublic void buildLegRight(){System.out.println("画出胖子的右腿");}}

我们的生成器交给指挥者来实现创建的动作

package com.shejimoshi.create.Builder;/*** 功能:创建人物的指挥者*/public class PersonDirector{private PersonBuilder pb;//传递相应的人物创建模型public PersonDirector(PersonBuilder pber){this.pb = pber;}//创建一个人public void createPerson(){pb.buildHead();pb.buildBody();pb.buildArmLeft();pb.buildArmRight();pb.buildLegLeft();pb.buildLegRight();}}

测试案例:

package com.shejimoshi.create.Builder;/*** 功能:客户端程序*/public class Test{//创建相应的人物public static void create(PersonBuilder pb){//借助参数传过来的模型创建相应的对象PersonDirector pd = new PersonDirector(pb);pd.createPerson();}public static void main(String []args){PersonThinBuilder ptb = new PersonThinBuilder("图像工具", "画笔");create(ptb); //创建一个瘦子System.out.println("==============================================================");PersonFatBuilder pfb = new PersonFatBuilder("图像工具", "画笔");create(pfb);}}

运行结果:

画出一个瘦子的头画出一个瘦子的身体画出瘦子的左臂画出瘦子的右臂画出瘦子左腿画出瘦子的右腿==============================================================画出一个胖子的头画出一个胖子的身体画出胖子的左臂画出胖子的右臂画出胖子左腿画出胖子的右腿

以上就是java建造者模式,希望对大家学习java程序设计有所帮助。

给我留言