public abstract class PersonBuilder {
protected Graphics graphics;
public PersonBuilder(Graphics graphics) {
this.graphics = graphics;
}
// 这里使用不同的方法名来区分不同的建造步骤
protected abstract void buildHead();
protected abstract void buildBody();
protected abstract void buildLeftArm();
protected abstract void buildRightArm();
protected abstract void buildLeftLeg();
protected abstract void buildRightLeg();
}
/**
* 瘦小人的建造者
*/
public class ThinPersonBuilder extends PersonBuilder {
public ThinPersonBuilder(Graphics graphics) {
super(graphics);
}
@Override
public void buildHead() {
this.graphics.drawEllipse(50, 20, 30, 30);
}
@Override
public void buildBody() {
this.graphics.drawRectangle(60, 50, 10, 50);
}
@Override
public void buildLeftArm() {
this.graphics.drawLine(60, 50, 40, 100);
}
@Override
public void buildRightArm() {
this.graphics.drawLine(70, 50, 90, 100);
}
@Override
public void buildLeftLeg() {
this.graphics.drawLine(60, 100, 45, 150);
}
@Override
public void buildRightLeg() {
this.graphics.drawLine(70, 100, 85, 150);
}
}
/**
* 建造小人的指挥者
*/
public class PersonDirector {
private PersonBuilder personBuilder;
public PersonDirector(PersonBuilder personBuilder) {
this.personBuilder = personBuilder;
}
// 这里约束的小人的建造过程, 所以不会出现小人不完整的情况
public void createPerson() {
this.personBuilder.buildHead();
this.personBuilder.buildBody();
this.personBuilder.buildLeftArm();
this.personBuilder.buildRightArm();
this.personBuilder.buildLeftLeg();
this.personBuilder.buildRightLeg();
}
}
建造者模式定义:
Separate the construction of a complex object from its representation so that the same construction process can create different representations(将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示)