溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

【設(shè)計模式與Android】建造者模式——建軍大業(yè)

發(fā)布時間:2020-07-29 07:22:02 來源:網(wǎng)絡(luò) 閱讀:837 作者:東風(fēng)玖哥 欄目:移動開發(fā)

什么是建造者模式

 

所謂建造者模式,就是將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示的設(shè)計模式。建造者模式在構(gòu)建過程中隱藏了復(fù)雜的實現(xiàn)細(xì)節(jié),可以大大降低代碼耦合度。

 

建造者模式的實現(xiàn)方式

 

《水滸傳》講述了的故事,梁山泊是一個不斷壯大的隊伍

先寫一個Troops:

public abstract class Troops {

    
protected String leader;
    
protected ArrayList<String> others = new ArrayList<>();
    
protected String purpose;

    
//領(lǐng)袖
    public void setLeader(String leader) {
        
this.leader = leader;
    }

    
//其他人
    public void setOthers(String... others) {
        
for (String other:others){
            
this.others.add(other);
        }
    }

    
//宗旨
    public abstract void setPurpose();


    
@Override
    
public String toString() {
        
return "Troops{" +
                
"leader='" + leader + '\'' +
                
", others=" + others.toString() +
                
", purpose='" + purpose + '\'' +
                
'}';
    }
}

 

這是梁山的Troops:

public class Liangshan extends Troops {

    
protected Liangshan(){}

    
@Override
    
public void setPurpose() {
        
purpose = "替天行道";
    }
}

 

再寫一個Builder:

public abstract class Builder {

    
public abstract void buildLeader(String leader);

    
public abstract void buildOthers(String... others);

    
public abstract void buildPurpose();

    
public abstract Troops create();

}

 

這是好漢們的Builder:

public class LiangshanBuilder extends Builder {

    
private Liangshan liangshan;

    
@Override
    
public void buildLeader(String leader) {
        
liangshan.setLeader(leader);
    }

    
@Override
    
public void buildOthers(String... others) {
        
liangshan.setOthers(others);
    }

    
@Override
    
public void buildPurpose() {
        
liangshan.setPurpose();
    }

    
@Override
    
public Troops create() {
        
return liangshan;
    }
}

 

接下來寫一個Director:

public class Director {

    Builder
mBuilder = null;

    
public Director(Builder builder){
        
this.mBuilder = builder;
    }

    
public void construct(String leader,String... others){
        
mBuilder.buildLeader(leader);
        
mBuilder.buildOthers(others);
        
mBuilder.buildPurpose();
    }

}

 

我們只需要如下代碼便可以實現(xiàn)梁山好漢的大聚義:

Builder builder = new LiangshanBuilder();
Director director =
new Director(builder);
director.construct(
"宋江","盧俊義","吳用","公孫勝");
Log.
e("梁山",builder.create().toString());

 

在實際開發(fā)過程中,Director層常常被省略,由一個鏈?zhǔn)秸{(diào)用的Builder來進(jìn)行對象的組裝。我們這次用梁山好漢的對立面——方臘來舉例,這次這么改寫上文的Builder:

public class MingjiaoBuilder{
    
private Mingjiao mingjiao;

    
public MingjiaoBuilder(){
        
mingjiao = new Mingjiao();
    }

    
public MingjiaoBuilder buildLeader(String leader) {
        
mingjiao.setLeader(leader);
        
return this;
    }

    
public MingjiaoBuilder buildOthers(String... others) {
        
mingjiao.setOthers(others);
        
return this;
    }

    
public MingjiaoBuilder buildPurpose() {
        
mingjiao.setPurpose();
        
return this;
    }

    
public Mingjiao create() {
        
return mingjiao;
    }
}

 

當(dāng)然,Troops是這樣繼承的:

public class Mingjiao extends Troops {
    
@Override
    
public void setPurpose() {
        
this.purpose = "作亂犯上";
    }
}

 

然后方臘作亂犯上的過程是這樣的:

MingjiaoBuilder builder = new MingjiaoBuilder()
        
//雖是妄稱天子位
        .buildLeader("方臘")
        
//也須偽列宰臣班
        .buildOthers("石寶","鄧元覺","方杰")
        .buildPurpose();
Log.
e("明教",builder.create().toString());

 

 

Android源碼中的建造者模式

 

1)AlertDialog.Builder

AlertDialog.Builder是Android源碼中最常見的建造者模式,調(diào)用方式不再贅述。不過請注意這個建造者模式中并沒有Director層的出現(xiàn),因此這是一種簡化的建造者模式。

 

Android開發(fā)中如何利用建造者模式

 

1)建造者模式具備封裝性良好的優(yōu)點。在一個對象的初始化特別復(fù)雜、并且很多參數(shù)都有默認(rèn)值時的優(yōu)勢非常明顯。

 

2)建造者模式還具備Builder獨(dú)立、易于擴(kuò)展的優(yōu)點。可以在幾個setter方法執(zhí)行順序不同時產(chǎn)生不同的結(jié)果。

 

需要注意的幾個問題

 

1)建造者模式會產(chǎn)生多余的Builder對象和Director對象,是典型的用運(yùn)行效率換開發(fā)進(jìn)度的設(shè)計模式


本系列其他博客

 


【設(shè)計模式與Android】原型模式——復(fù)制中心走出來的克隆人


【設(shè)計模式與Android】工廠方法模式——化工女神的工廠


【設(shè)計模式與Android】抽象工廠模式——嵌合體克隆工廠


【設(shè)計模式與Android】策略模式——錦囊里的上策中策下策


【設(shè)計模式與Android】狀態(tài)模式——一個人的兩幅面孔



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI