欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

【設(shè)計(jì)模式與Android】狀態(tài)模式——一個(gè)人的兩幅面孔-創(chuàng)新互聯(lián)

什么是狀態(tài)模式

創(chuàng)新互聯(lián)建站專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、伊美網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為伊美等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

所謂狀態(tài)模式,就是當(dāng)一個(gè)對(duì)象的內(nèi)在轉(zhuǎn)臺(tái)改變時(shí)允許改變其行為,這個(gè)對(duì)象看起來就像是改變了其類的設(shè)計(jì)模式。狀態(tài)模式和策略模式都是為具有多種可能情形設(shè)計(jì)的模式,兩者的結(jié)構(gòu)幾乎完全一樣,但狀態(tài)模式的行為是平行且不可替換的,而策略模式的行為則是彼此獨(dú)立的。換句話說就是:狀態(tài)模式將各個(gè)狀態(tài)所對(duì)應(yīng)的操作分離開來,即對(duì)于不同的狀態(tài),由不同的子類實(shí)現(xiàn)具體操作;而策略模式是直接依賴參數(shù)進(jìn)行選擇策略,不存在切換狀態(tài)的操作。

狀態(tài)模式的實(shí)現(xiàn)方式

古典名著《×××緣》第二十五回講述了唐敖和多九公等人乘船在海外游歷兩面國的故事,兩面國的居民天生兩幅面孔(狀態(tài)),他們對(duì)人的態(tài)度(行為)就是典型的狀態(tài)模式。首先定義一個(gè)行為接口:

public interfaceIState {

    voidface();

    voidword();

}

笑臉狀態(tài):

public classGoodFace implementsIState {
    @Override
    public voidface() {
        Log.e("表情","和顏悅色、滿面謙恭");
    }

    @Override
    public voidword() {
        Log.e("語言","嚶嚶嚶");
    }
}

兇臉狀態(tài):

public classBadFace implementsIState {
    @Override
    public voidface() {
        Log.e("表情","鼠眼鷹鼻,滿面橫肉");
    }

    @Override
    public voidword() {
        Log.e("語言","你(N)忙(M)吧(B),我(W)吃(C)檸(N)檬(M)");
    }
}

兩面國的人天生是演員:

public classActor {

    privateIState iState;

    private voidsetState(IState iState) {
        this.iState= iState;
    }

    public voidmeetPoorPerson(){
        Log.e("為啥變臉","見到窮人了");
        setState(newBadFace());
    }

    public voidmeetRichPerson(){
        Log.e("為啥變臉","見到有錢人了");
        setState(newGoodFace());
    }

    public voidface(){
        iState.face();
    }

    public voidword(){
        iState.word();
    }
}

見到唐敖和多九公之后:

Actor actor = newActor();
Log.e("唐敖","穿著綢衫");
actor.meetRichPerson();
actor.face();
actor.word();
Log.e("多九公","穿著布衫");
actor.meetPoorPerson();
actor.face();
actor.word();

靜態(tài)的文字視覺沖擊力不夠,讀者可以自覺百度“兩面國 木偶劇”,保證你對(duì)狀態(tài)模式印象深刻。

Android源碼中的狀態(tài)模式

(1)WifiSetting

就像Android系統(tǒng)自帶拍照、裁剪、相冊(cè)等系統(tǒng)Activity一樣,WifiSetting是一個(gè)系統(tǒng)Fragment,用來展示控制Wifi連接的UI。Wifi的開啟中、已開啟、關(guān)閉中、已關(guān)閉就是一個(gè)典型的狀態(tài)模式。

Android開發(fā)中如何利用狀態(tài)模式

(1)當(dāng)一個(gè)對(duì)象的行為取決于它的狀態(tài),并且它必須在運(yùn)行時(shí)根據(jù)狀態(tài)改變它的行為的時(shí)候適合使用狀態(tài)模式。因此從事loT開發(fā)的Android程序員應(yīng)該經(jīng)常用到狀態(tài)模式(loT設(shè)備的開機(jī)關(guān)機(jī)、播放暫停、BLE的連接斷開等)。

(2)當(dāng)前任遺留代碼中包含大量不易維護(hù)的多分支語句(if-else或switch-case)語句,并且這些分支都與對(duì)象狀態(tài)有關(guān)并且依賴對(duì)象狀態(tài)時(shí)。此時(shí)可以用狀態(tài)模式進(jìn)行重構(gòu)。

需要注意的幾個(gè)問題

(1)狀態(tài)模式的使用勢(shì)必會(huì)大大增加類和對(duì)象的數(shù)量,比策略模式還大,是典型的用性能和效率換開發(fā)進(jìn)度的設(shè)計(jì)模式之一。

本系列其他博客

【設(shè)計(jì)模式與Android】責(zé)任鏈模式——曹瞞兵敗走華容

【設(shè)計(jì)模式與Android】命令模式——軍令如山

【設(shè)計(jì)模式與Android】觀察者模式——千里眼與順風(fēng)耳

【設(shè)計(jì)模式與Android】備忘錄模式——在齊太史簡(jiǎn)

【設(shè)計(jì)模式與Android】迭代器模式——容器遍歷,細(xì)節(jié)隱藏


另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享標(biāo)題:【設(shè)計(jì)模式與Android】狀態(tài)模式——一個(gè)人的兩幅面孔-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://www.chinadenli.net/article18/ccsddp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計(jì)服務(wù)器托管企業(yè)網(wǎng)站制作云服務(wù)器微信公眾號(hào)

廣告

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

成都定制網(wǎng)站建設(shè)