Android中常用的設計模式-建造者模式(Builder Pattern)
作者:Reathin
建造者模式(Builder Pattern)是一種創建型設計模式,也被稱為生成器模式。它將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
介紹
建造者模式(Builder Pattern)是一種創建型設計模式,也被稱為生成器模式。它將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
優缺點
優點:
- 封裝性好,構建和表示分離。
- 擴展性好,各個具體的建造者相互獨立,有利于系統的解耦。
- 客戶端不必知道產品內部組成的細節,建造者可以對創建過程逐步細化,而不對其它模塊產生任何影響,便于控制細節風險。
缺點:
- 產品的組成部分必須相同,這限制了其使用范圍。
- 如果產品的內部變化復雜,如果產品內部發生變化,則建造者也要同步修改,后期維護成本較大。
結構
- Builder:為創建一個產品對象的各個部件指定抽象接口。
- ConcreteBuilder:實現Builder的接口以構造和裝配該產品的各個部件,定義并明確它所創建的表示,并提供一個檢索產品的接口。
- Director:構造一個使用Builder接口的對象。
- Product:表示被構造的復雜對象。ConcreteBuilder創建該產品的內部表示并定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的接口。
示例
public class Person {
private String mPersonName;
private int mPersonAge;
private int mSex;
private String mCardNumber;
public Person Person(){
return new Person(new Person.Builder());
}
public Person(Person.Builder builder){
this.mCardNumber = builder.mCardNumber;
this.mSex = builder.mSex;
this.mPersonAge = builder.mPersonAge;
this.mPersonName = builder.mPersonName;
}
public static final class Builder {
private String mPersonName;
private int mPersonAge;
private int mSex;
private String mCardNumber;
public Builder(){}
public Person build(){
return new Person(this);
}
public Person.Builder setPersonName(String mPersonName) {
this.mPersonName = mPersonName;
return this;
}
public Person.Builder setPersonAge(int mPersonAge) {
this.mPersonAge = mPersonAge;
return this;
}
public Person.Builder setSex(int mSex) {
this.mSex = mSex;
return this;
}
public Person.Builder setCardNumber(String mCardNumber) {
this.mCardNumber = mCardNumber;
return this;
}
}
}
//使用Buidler構建Person對象
Person person = new Person.Builder()
.setPersonName("張三")
.setSex(1)
.setPersonAge(30)
.build();
建造者模式通過將復雜對象的構建過程分解為多個簡單的構建步驟,然后按照順序逐步構建,使得構建過程更加清晰和易于管理。同時,由于構建過程和表示被分離,因此可以創建不同的表示,從而提高了系統的靈活性和可擴展性。
在使用建造者模式時,需要仔細考慮產品的組成部分是否相同,以及產品的內部變化是否復雜,以避免在后期維護中產生不必要的麻煩。此外,還需要根據實際情況選擇合適的角色和實現方式,以達到最佳的設計效果。
責任編輯:趙寧寧
來源:
沐雨花飛蝶