1. 建造接口类:画小人
package com.hj.designPattern.build;
public interface IBuildPerson {
void drawHead();
void drawBody();
void drawArms();
void drawLegs();
// 建造结果
void resultPerson();
}
2. 建造的产品:人
package com.hj.designPattern.build;
import lombok.Data;
@Data
public class Person {
private String head;
private String body;
private String arms;
private String legs;
public void result(){
System.out.println(getHead()+getBody()+getArms()+getLegs());
}
}
3. 具体建造类:画胖人
package com.hj.designPattern.build;
public class BuildFatPerson implements IBuildPerson {
private Person person = new Person();
BuildFatPerson() {
}
@Override
public void drawHead() {
person.setHead("大头");
System.out.println("第一步画头");
}
@Override
public void drawBody() {
person.setBody("强壮的身体");
System.out.println("第二步画身体");
}
@Override
public void drawArms() {
person.setArms("粗壮的胳膊");
System.out.println("第三步画胳膊");
}
@Override
public void drawLegs() {
person.setLegs("粗壮的大腿");
System.out.println("第四步画大腿");
}
@Override
public void resultPerson() {
person.result();
}
}
4. 画瘦人
package com.hj.designPattern.build;
public class BuildThinPerson implements IBuildPerson {
Person person = new Person();
@Override
public void drawHead() {
person.setHead("小头");
System.out.println("第一步画头");
}
@Override
public void drawBody() {
person.setBody("瘦小的身体");
System.out.println("第二步画身体");
}
@Override
public void drawArms() {
person.setArms("细小的胳膊");
System.out.println("第三步画胳膊");
}
@Override
public void drawLegs() {
person.setLegs("细小的腿");
System.out.println("第四步画大腿");
}
@Override
public void resultPerson() {
person.result();
}
}
5. 指挥者,按顺序画各部位:
package com.hj.designPattern.build;
public class Director {
private IBuildPerson builder;
Director(IBuildPerson builder){
this.builder = builder;
}
public void direct(){
builder.drawHead();
builder.drawBody();
builder.drawArms();
builder.drawLegs();
}
}
6. 测试类
package com.hj.designPattern.build;
public class BuilderTest {
public static void main(String[] args) {
IBuildPerson fatPersonBuilder = new BuildFatPerson();
Director director = new Director(fatPersonBuilder);
director.direct();
fatPersonBuilder.resultPerson();
IBuildPerson thinPersonBuilder = new BuildThinPerson();
director = new Director(thinPersonBuilder);
director.direct();
thinPersonBuilder.resultPerson();
}
}
7. 运行结果
第一步画头
第二步画身体
第三步画胳膊
第四步画大腿
大头强壮的身体粗壮的胳膊粗壮的大腿
第一步画头
第二步画身体
第三步画胳膊
第四步画大腿
小头瘦小的身体细小的胳膊细小的腿