Android中常用的設(shè)計(jì)模式-建造者模式(Builder Pattern)
介紹
建造者模式(Builder Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,也被稱(chēng)為生成器模式。它將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 封裝性好,構(gòu)建和表示分離。
- 擴(kuò)展性好,各個(gè)具體的建造者相互獨(dú)立,有利于系統(tǒng)的解耦。
- 客戶(hù)端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),建造者可以對(duì)創(chuàng)建過(guò)程逐步細(xì)化,而不對(duì)其它模塊產(chǎn)生任何影響,便于控制細(xì)節(jié)風(fēng)險(xiǎn)。
缺點(diǎn):
- 產(chǎn)品的組成部分必須相同,這限制了其使用范圍。
- 如果產(chǎn)品的內(nèi)部變化復(fù)雜,如果產(chǎn)品內(nèi)部發(fā)生變化,則建造者也要同步修改,后期維護(hù)成本較大。
結(jié)構(gòu)
- Builder:為創(chuàng)建一個(gè)產(chǎn)品對(duì)象的各個(gè)部件指定抽象接口。
- ConcreteBuilder:實(shí)現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個(gè)部件,定義并明確它所創(chuàng)建的表示,并提供一個(gè)檢索產(chǎn)品的接口。
- Director:構(gòu)造一個(gè)使用Builder接口的對(duì)象。
- Product:表示被構(gòu)造的復(fù)雜對(duì)象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過(guò)程,包含定義組成部件的類(lèi),包括將這些部件裝配成最終產(chǎn)品的接口。
示例
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構(gòu)建Person對(duì)象
Person person = new Person.Builder()
.setPersonName("張三")
.setSex(1)
.setPersonAge(30)
.build();
建造者模式通過(guò)將復(fù)雜對(duì)象的構(gòu)建過(guò)程分解為多個(gè)簡(jiǎn)單的構(gòu)建步驟,然后按照順序逐步構(gòu)建,使得構(gòu)建過(guò)程更加清晰和易于管理。同時(shí),由于構(gòu)建過(guò)程和表示被分離,因此可以創(chuàng)建不同的表示,從而提高了系統(tǒng)的靈活性和可擴(kuò)展性。
在使用建造者模式時(shí),需要仔細(xì)考慮產(chǎn)品的組成部分是否相同,以及產(chǎn)品的內(nèi)部變化是否復(fù)雜,以避免在后期維護(hù)中產(chǎn)生不必要的麻煩。此外,還需要根據(jù)實(shí)際情況選擇合適的角色和實(shí)現(xiàn)方式,以達(dá)到最佳的設(shè)計(jì)效果。