創建者模式

java23種設計模式之一,英文叫Builder Pattern。其核心思想是將一個“複雜對象的構建算法”與它的“部件及組裝方式”分離,使得構件算法和組裝方式可以獨立應對變化;復用同樣的構建算法可以創建不同的表示,不同的構建過程可以復用相同的部件組裝方式。

基本介紹

  • 中文名:創建者模式
  • 外文名:Builder Pattern
  • 屬於:java23種設計模式
  • 主要由:五個部分構成
概述,主要優缺點,組成部分,代碼示例,

概述

java23種設計模式之一,英文叫Builder Pattern。其核心思想是將一個“複雜對象的構建算法”與它的“部件及組裝方式”分離,使得構件算法和組裝方式可以獨立應對變化;復用同樣的構建算法可以創建不同的表示,不同的構建過程可以復用相同的部件組裝方式。

主要優缺點

在創建者模式中,客戶端不再負責對象的創建與組裝,而是把這個對象創建的責任交給其具體的創建者類,把組裝的責任交給組裝類,客戶端只負責對象的調用,從而明確了各個類的職責。
雖然利用創建者模式可以創建出不同類型的產品,但是如果產品之間的差異巨大,則需要編寫多個創建者類才能實現,如果這是結合工廠模式更好。

組成部分

創建者模式主要由五個部分構成:組裝類,抽象創建者類,實現抽象創建者類的具體創建者類,抽象產品和實現抽象產品的具體產品類。
創建者模式

代碼示例

// Person
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 String getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot= foot;
}
public void setBody(String body) {
this.body= body;
}
}
//Builder接口
public interface PersonBuilder{
void buildHead();
void buildBody();
void buildFoot();
Person buildPerson();
}
//Builder實現:人類
publicclass HumanBuilder implements PersonBuilder {
private Person person;
public HumanBuilder(){
this.person=new Person();
}
public void buildBody() {
this.person.setBody("創建 人類 身體!");
}
publicvoid buildFoot() {
this.person.setFoot("創建 人類 腳!");
}
publicvoid buildHead() {
this.person.setHead("創建 人類 頭!");
}
public Person buildPerson() {
return person;
}
}
//Builder實現:變形金剛
publicclass TransformerBuilder implements PersonBuilder {
private Person person;
public TransformerBuilder(){
this.person=newPerson();
}
publicvoid buildBody() {
this.person.setBody("創建 變形金剛 身體!");
}
public void buildFoot() {
this.person.setFoot("創建 變形金剛 腳!");
}
publicvoid buildHead() {
this.person.setHead("創建 變形金剛 頭!");
}
public Person buildPerson() {
return person;
}
}
//Director構建嚮導
publicclass PersonDirector {
public Person constructPerson(PersonBuilder pb) {
pb.buildHead();
pb.buildBody();
pb.buildFoot();
return pb.buildPerson();
}
}
//測試
publicclass Test {
publicstaticvoid main(String[] args) {
PersonDirector pd = new PersonDirector();
Person person = pd.constructPerson(new HumanBuilder());
System.out.println(person.getBody());
System.out.println(person.getFoot());
System.out.println(person.getHead() +" \n");
Person transformer = pd.constructPerson(newTransformerBuilder());
System.out.println(transformer.getBody());
System.out.println(transformer.getFoot());
System.out.println(transformer.getHead());
}
}

相關詞條

熱門詞條

聯絡我們