abstractclassActorBuilder{protectedstatic Actor actor =newActor();publicabstractvoidbuildType();publicabstractvoidbuildSex();publicabstractvoidbuildFace();publicabstractvoidbuildCostume();publicabstractvoidbuildHairstyle();publicstatic Actor construct(ActorBuilder ab){
ab.buildType();
ab.buildSex();
ab.buildFace();
ab.buildCostume();
ab.buildHairstyle();return actor;}}
2、引入钩子方法:精确控制对象的创建过程
abstractclassActorBuilder{protected Actor actor =newActor();publicabstractvoidbuildType();publicabstractvoidbuildSex();publicabstractvoidbuildHairstyle();//钩子方法publicbooleanisBareheaded(){returnfalse;}public Actor createActor(){return actor;}}classDevilBuilderextendsActorBuilder{publicvoidbuildType(){
actor.setType("恶魔");}publicvoidbuildSex(){
actor.setSex("妖");}publicvoidbuildHairstyle(){
actor.setHairstyle("光头");}//覆盖钩子方法publicbooleanisBareheaded(){returntrue;}}classActorController{public Actor construct(ActorBuilder ab){
Actor actor;
ab.buildType();
ab.buildSex();//通过钩子方法来控制产品的构建if(!ab.isBareheaded()){
ab.buildHairstyle();}
actor = ab.createActor();return actor;}}