概念:給出一個接口,以規範產品對象的各個組成成分的建造。這個接口規定要實現複製對象的哪些部分的創建,並不涉及具體的對象部件的創建。
應用場景:
- 需要生成的對象具有複雜的內部結構
- 需要生成的對象內部屬性本身相互依賴
與工廠模式的區別:建造者模式更加關注於零部件裝配的順序。
實例:
public class Person {
private String head;
private String body;
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 getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
}
public interface PersonBuilder {
void builderHead();
void builderBody();
void builderFoot();
Person builderPerson();
}
public class ManBuilder implements PersonBuilder {
private Person person;
public ManBuilder() {
person = new Person();
}
public void builderHead() {
person.setHead("頭:美國人鼻子尖藍眼睛");
}
public void builderBody() {
person.setBody("身體:塊頭大");
}
public void builderFoot() {
person.setFoot("尾:腿長");
}
public Person builderPerson() {
return person;
}
}
public class PersonDirector {
public Person createPerson(PersonBuilder personBuilder) {
personBuilder.builderHead();
personBuilder.builderBody();
personBuilder.builderFoot();
return personBuilder.builderPerson();
}
public static void main(String[] args) {
PersonDirector personDirector = new PersonDirector();
Person person = personDirector.createPerson(new ManBuilder());
System.out.println(person.getHead() + person.getBody() + person.getFoot());
}
}
通過上述代碼,可以看出,其實就是將目標對象拆解成各個部分,通過一個接口抽象出需要創建哪些部分,最後通過這個接口的實現類,給各個部分賦值,並返回完整的目標對象。舉個例子,就相當於網絡遊戲裏的裝備欄,個人裝備有頭盔,衣服,褲子,武器等等,將這些部分通過一個建造者把他們組裝成一個整體。