定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造的过程都是相似的,但可以创造出形形色色的东西
结构:
被创造者
创建过程接口(定义了创建标准)
创建指导类
复杂对象的构建(创建指导类),表示(创建过程接口),两者分离。
被创建者:
public class Human {
private String head;
private String body;
private String hand;
private String foot;
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getHand() {
return hand;
}
public void setHand(String hand) {
this.hand = hand;
}
public String getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
}
创建过程接口(定义了创建标准):
public interface IBuildHuman {
public void buildHead();
public void buildBody();
public void buildHand();
public void buildFoot();
public Human createHuman();
}
实现创建标准:
public class SmartManBuilder implements IBuildHuman {
Human human;
public SmartManBuilder(){
human = new Human();
}
@Override
public void buildHead() {
human.setHead("智商180的头脑");
}
@Override
public void buildBody() {
human.setBody("新的身体");
}
@Override
public void buildHand() {
human.setHand("新的手");
}
@Override
public void buildFoot() {
human.setFoot("新的脚");
}
@Override
public Human createHuman() {
return human;
}
}
创建者的精髓:指导创建类,定义了创建的流程
public class Director {
public Human createHumanByDirecotr(IBuildHuman bh){
bh.buildBody();
bh.buildFoot();
bh.buildHand();
bh.buildHead();
return bh.createHuman();
}
测试代码:
public class BuilderTest {
public static void main(String[] args){
Director director = new Director();
Human human = director.createHumanByDirecotr(new SmartManBuilder());
System.out.println(human.getHead());
System.out.println(human.getBody());
System.out.println(human.getHand());
System.out.println(human.getFoot());
}
}
我们不需要知道具体的创建顺序,因为让director创建指导类代劳了,建造的过程,启动建造的过程,以及最后如何选择建造,都被区分开来。