一慢显,java中的 Builder模式
概念
構(gòu)建者模式將客戶端與包含多個組成部分(或部件)的復(fù)雜對象的創(chuàng)建過程分離使用場景
當(dāng)構(gòu)造一個對象需要很多參數(shù)的時候,并且參數(shù)的個數(shù)和類型不固定的時候-
UML結(jié)構(gòu)圖分析
image.png
總結(jié):
1.Builder:為創(chuàng)建產(chǎn)品Product對象的各個部件指定抽象接口
2.ConcreateBuilder:實(shí)現(xiàn)Builder接口沃琅,實(shí)現(xiàn)各部件結(jié)構(gòu)的構(gòu)造和裝配方法
3.Product:它是被構(gòu)建的復(fù)雜對象,包含多個組成部件
4.Directior:指揮者选酗,負(fù)責(zé)安排負(fù)責(zé)對象的建造次序阵难,指揮者與抽象Builder之間存在關(guān)聯(lián)關(guān)系 實(shí)際代碼分析
public class Product {
private String partA;
private String partB;
private String partC;
public String getPartA() {
return partA;
}
public void setPartA(String partA) {
this.partA = partA;
}
public String getPartB() {
return partB;
}
public void setPartB(String partB) {
this.partB = partB;
}
public String getPartC() {
return partC;
}
public void setPartC(String partC) {
this.partC = partC;
}
}
public abstract class Builder {
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
public Product getResult() {
return product;
}
}
public class ConcreateBuilder extends Builder{
@Override
public void buildPartA() {
}
@Override
public void buildPartB() {
}
@Override
public void buildPartC() {
}
}
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void setBuilder(Builder builder) {
this.builder = builder;
}
public Product construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}
Builder builder = new ConcreateBuilder();
Director director = new Director(builder);
Product product = director.construct();
-
優(yōu)點(diǎn)
松散耦合
容易修改內(nèi)部屬性
更好的復(fù)用性(具體實(shí)現(xiàn)以及算法都可以復(fù)用) -
缺點(diǎn)
產(chǎn)生多余的Builder對象以及Dirctor對象,消耗內(nèi)存
對于構(gòu)造過程的暴露
二芒填,Builder模式在android中的應(yīng)用
android中的簡單實(shí)現(xiàn)
public class AndroidProduct {
private String partA;
private String partB;
private String partC;
private AndroidProduct(String partA, String partB, String partC) {
this.partA = partA;
this.partB = partB;
this.partC = partC;
}
public static class Builder {
private String partA;
private String partB;
private String partC;
public Builder setPartA(String partA) {
this.partA = partA;
return this;
}
public Builder setPartB(String partB) {
this.partB = partB;
return this;
}
public Builder setPartC(String partC) {
this.partC = partC;
return this;
}
public AndroidProduct build() {
return new AndroidProduct(partA, partB, partC);
}
}
}
AndroidProduct androidProduct = new AndroidProduct.Builder()
.setPartA("a")
.setPartB("b")
.setPartC("c").build();
Android中的實(shí)際應(yīng)用:
1.AlertDialog
2.Gilde/okhttp