假设一个场景,可以在线的选取玩偶的一些零件,组装成玩偶,需要组装 头部 ,腹部,下肢
1.普通java对象
package com.mkb.creational.builder;/*** @author meikb* @desc 比如创建机器角色 头 身体 腿* 正常情况是new 一个对象 然后一个个设置属性*** @date 2020-05-08 15:26*/public class Actor {//=============头==============private String eye;//眼睛private String ear;//耳朵private String mouth; //嘴巴private String nose; //鼻子private String eyebrow; //眉毛//=============身体==============private String body;private String arm; //胳膊//=============腿==============private String leg; //腿private String foot; //脚private String shoes; //鞋public String getEye() {return eye;}public void setEye(String eye) {this.eye = eye;}public String getEar() {return ear;}public void setEar(String ear) {this.ear = ear;}public String getMouth() {return mouth;}public void setMouth(String mouth) {this.mouth = mouth;}public String getNose() {return nose;}public void setNose(String nose) {this.nose = nose;}public String getEyebrow() {return eyebrow;}public void setEyebrow(String eyebrow) {this.eyebrow = eyebrow;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}public String getArm() {return arm;}public void setArm(String arm) {this.arm = arm;}public String getLeg() {return leg;}public void setLeg(String leg) {this.leg = leg;}public String getFoot() {return foot;}public void setFoot(String foot) {this.foot = foot;}public String getShoes() {return shoes;}public void setShoes(String shoes) {this.shoes = shoes;}@Overridepublic String toString() {return "Actor{" +"eye='" + eye + '\'' +", ear='" + ear + '\'' +", mouth='" + mouth + '\'' +", nose='" + nose + '\'' +", eyebrow='" + eyebrow + '\'' +", body='" + body + '\'' +", arm='" + arm + '\'' +", leg='" + leg + '\'' +", foot='" + foot + '\'' +", shoes='" + shoes + '\'' +'}';}}
2 .构建器 抽象类
/*** @author meikb* @desc 构建者肯定与要拥有构建对象* @date 2020-05-08 15:34*/public abstract class ActorBuilder {//要拥有构建对象Actor actor = new Actor();public abstract void buildHead();public abstract void buildBody();public abstract void buildLegs();//把构建对象返回public Actor getActor() {return actor;}}
3.具体的构建器1
/*** @author meikb* @desc* @date 2020-05-08 15:34*/public class AngelBuilder extends ActorBuilder{@Overridepublic void buildHead() {actor.setNose("小鼻子");actor.setEar("小耳朵");actor.setEye("大眼睛");actor.setEyebrow("柳叶眉");actor.setMouth("小嘴巴");System.out.println("开始安装头部");}@Overridepublic void buildBody() {actor.setBody("细腰");actor.setArm("细胳膊");System.out.println("开始安装身体");}@Overridepublic void buildLegs() {actor.setLeg("大长腿");actor.setFoot("小脚");actor.setShoes("水晶鞋");System.out.println("开始安装下肢");}}
4.具体构建器2
/*** @author meikb* @desc* @date 2020-05-08 15:34*/public class HeroBuilder extends ActorBuilder{@Overridepublic void buildHead() {actor.setNose("大鼻子");actor.setEar("大耳朵");actor.setEye("大眼睛");actor.setEyebrow("浓眉");actor.setMouth("大嘴巴");System.out.println("开始安装头部");}@Overridepublic void buildBody() {actor.setBody("大身板");actor.setArm("粗胳膊");System.out.println("开始安装身体");}@Overridepublic void buildLegs() {actor.setLeg("长腿");actor.setFoot("大脚");actor.setShoes("球鞋");System.out.println("开始安装下肢");}}
5.构建者持有构建器
/*** @author meikb* @desc 构建者 持有建造类* @date 2020-05-08 16:57*/public class Director {public Actor construct(ActorBuilder actorBuilder){actorBuilder.buildHead();actorBuilder.buildBody();actorBuilder.buildLegs();System.out.println("开始拼接");return actorBuilder.actor;}}
6.主函数
/*** @author meikb* @desc* @date 2020-05-08 16:59*/public class ActorMain {public static void main(String[] args) {Director director = new Director();ActorBuilder heroBuilder = new HeroBuilder();Actor actor1 = director.construct(heroBuilder);System.out.println(actor1.toString());ActorBuilder angleBulider = new AngelBuilder();Actor actor2 = director.construct(angleBulider);System.out.println(actor2.toString());// bulidHero();}public static void bulidHero(){Actor hero = new Actor();buildHeroHead(hero);buildHeroBody(hero);buildHeroLegs(hero);System.out.println("开始拼接");System.out.println(hero.toString());}private static void buildHeroLegs(Actor hero) {hero.setLeg("长腿");hero.setFoot("大脚");hero.setShoes("球鞋");System.out.println("开始安装下肢");}private static void buildHeroBody(Actor hero) {hero.setBody("大身板");hero.setArm("粗胳膊");System.out.println("开始安装身体");}private static void buildHeroHead(Actor hero) {hero.setNose("大鼻子");hero.setEar("大耳朵");hero.setEye("大眼睛");hero.setEyebrow("浓眉");hero.setMouth("大嘴巴");System.out.println("开始安装头部");}}
