定義:
建造者模式是將一個復(fù)雜對象的構(gòu)建與它的表示分離炒考,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示设塔。適用場景:
當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨(dú)立于該對象的組成部分以及它們的裝配方式時(shí)
當(dāng)構(gòu)造過程必須允許被構(gòu)造的對象有不同表示時(shí)-
UML:
image.png- uml解讀:
1 builder:為創(chuàng)建一個產(chǎn)品對象的各個部件指定抽象接口寺擂。
2 ConcreteBuilder:實(shí)現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個部件河闰,定義并明確它所創(chuàng)建的表示珍促,并 提供一個檢索產(chǎn)品的接口响委。
3 Director:構(gòu)造一個使用Builder接口的對象新思。
4 Product:表示被構(gòu)造的復(fù)雜對象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過程赘风,包含定義組成部件的類夹囚,包括將這些部件裝配成最終產(chǎn)品的接口。
- uml解讀:
模型:
建造一個人邀窃,人有身體荸哟,腳,頭等
//builder
public interface PersonBuilder {
void buildHead();
void buildBody();
void buildFoot();
Person buildPerson();
}
//具體建造工具ConcreteBuilder
public class ManBuilder implements PersonBuilder {
Person person;
public ManBuilder() {
person = new Person();
}
public void buildbody() {
person.setBody("建造男人的身體");
}
public void buildFoot() {
person.setFoot("建造男人的腳");
}
public void buildHead() {
person.setHead("建造男人的頭");
}
public Person buildPerson() {
return person;
}
}
//建造者Director
public class PersonDirector {
public Person constructPerson(PersonBuilder pb) {
pb.buildHead();
pb.buildBody();
pb.buildFoot();
return pb.buildPerson();
}
}
//建造出來的產(chǎn)品Product
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;
}
}
//具體的產(chǎn)品瞬捕,男人
public class Man extends Person {
}
//測試Test
public class Test{
public static void main(String[] args) {
PersonDirector pd = new PersonDirector();
Person person = pd.constructPerson(new
ManBuilder());
System.out.println(person.getBody());
System.out.println(person.getFoot());
System.out.println(person.getHead());
}
}
我們這里的ManBuilder提供了構(gòu)建人體部件方法鞍历,以及提供一個檢索生成的個體的方法buildPerson。
而Director則負(fù)責(zé)構(gòu)建個流程肪虎,并返回給調(diào)用者最終的產(chǎn)品劣砍。
通過這兩個類,我們將person這個產(chǎn)品的構(gòu)建層(Director)與表示層(ManBuilder )分離扇救,當(dāng)我們想增加表示層時(shí)刑枝,例如添加一個woman的構(gòu)建,則不需要改變Director構(gòu)建過程迅腔。