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

什么是建造者模式

成都創(chuàng)新互聯(lián)公司是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的十年時間我們累計服務(wù)了上千家以及全國政企客戶,如成都資質(zhì)代辦等企業(yè)單位,完善的項目管理流程,嚴(yán)格把控項目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實力獲得客戶的一致贊美。

 

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

 

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

 

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

先寫一個Troops:

public abstract classTroops {

    protectedStringleader;
    protectedArrayList<String>others=newArrayList<>();
    protectedStringpurpose;

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

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

    //宗旨
    public abstract voidsetPurpose();


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

 

這是梁山的Troops:

public classLiangshanextendsTroops {

    protectedLiangshan(){}

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

 

再寫一個Builder:

public abstract classBuilder {

    public abstract voidbuildLeader(String leader);

    public abstract voidbuildOthers(String... others);

    public abstract voidbuildPurpose();

    public abstractTroops create();

}

 

這是好漢們的Builder:

public classLiangshanBuilderextendsBuilder {

    privateLiangshanliangshan;

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

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

    @Override
    public voidbuildPurpose() {
        liangshan.setPurpose();
    }

    @Override
    publicTroops create() {
        returnliangshan;
    }
}

 

接下來寫一個Director:

public classDirector {

    BuildermBuilder=null;

    publicDirector(Builder builder){
        this.mBuilder= builder;
    }

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

}

 

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

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

 

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

public classMingjiaoBuilder{
    privateMingjiaomingjiao;

    publicMingjiaoBuilder(){
        mingjiao=newMingjiao();
    }

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

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

    publicMingjiaoBuilder buildPurpose() {
        mingjiao.setPurpose();
        return this;
    }

    publicMingjiao create() {
        returnmingjiao;
    }
}

 

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

public classMingjiaoextendsTroops {
    @Override
    public voidsetPurpose() {
        this.purpose="作亂犯上";
    }
}

 

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

MingjiaoBuilder builder =newMingjiaoBuilder()
        //雖是妄稱天子位
        .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獨立、易于擴展的優(yōu)點??梢栽趲讉€setter方法執(zhí)行順序不同時產(chǎn)生不同的結(jié)果。

 

需要注意的幾個問題

 

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

本系列其他博客

 

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

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

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

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

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

當(dāng)前標(biāo)題:【設(shè)計模式與Android】建造者模式——建軍大業(yè)
URL分享:http://bm7419.com/article10/jdehgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、網(wǎng)站策劃、移動網(wǎng)站建設(shè)、ChatGPT、云服務(wù)器品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司