中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

【設計模式與Android】狀態模式——一個人的兩幅面孔

發布時間:2020-07-19 14:26:18 來源:網絡 閱讀:975 作者:東風玖哥 欄目:移動開發

什么是狀態模式

 

所謂狀態模式,就是當一個對象的內在轉臺改變時允許改變其行為,這個對象看起來就像是改變了其類的設計模式。狀態模式和策略模式都是為具有多種可能情形設計的模式,兩者的結構幾乎完全一樣,但狀態模式的行為是平行且不可替換的,而策略模式的行為則是彼此獨立的。換句話說就是:狀態模式將各個狀態所對應的操作分離開來,即對于不同的狀態,由不同的子類實現具體操作;而策略模式是直接依賴參數進行選擇策略,不存在切換狀態的操作。

 

狀態模式的實現方式

 

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

public interface IState {

    void face();

    void word();

}

 

笑臉狀態:

public class GoodFace implements IState {
    @Override
    public void face() {
        Log.e("表情","和顏悅色、滿面謙恭");
    }

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

 

兇臉狀態:

public class BadFace implements IState {
    @Override
    public void face() {
        Log.e("表情","鼠眼鷹鼻,滿面橫肉");
    }

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

 

兩面國的人天生是演員:

public class Actor {

    private IState iState;

    private void setState(IState iState) {
        this.iState = iState;
    }

    public void meetPoorPerson(){
        Log.e("為啥變臉","見到窮人了");
        setState(new BadFace());
    }

    public void meetRichPerson(){
        Log.e("為啥變臉","見到有錢人了");
        setState(new GoodFace());
    }

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

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

 

見到唐敖和多九公之后:

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

 

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

 

Android源碼中的狀態模式

 

(1)WifiSetting

就像Android系統自帶拍照、裁剪、相冊等系統Activity一樣,WifiSetting是一個系統Fragment,用來展示控制Wifi連接的UI。Wifi的開啟中、已開啟、關閉中、已關閉就是一個典型的狀態模式。

 

Android開發中如何利用狀態模式

 

1)當一個對象的行為取決于它的狀態,并且它必須在運行時根據狀態改變它的行為的時候適合使用狀態模式。因此從事loT開發的Android程序員應該經常用到狀態模式(loT設備的開機關機、播放暫停、BLE的連接斷開等)。

 

2)當前任遺留代碼中包含大量不易維護的多分支語句(if-else或switch-case)語句,并且這些分支都與對象狀態有關并且依賴對象狀態時。此時可以用狀態模式進行重構。

 

需要注意的幾個問題

 

1)狀態模式的使用勢必會大大增加類和對象的數量,比策略模式還大,是典型的用性能和效率換開發進度的設計模式之一。


本系列其他博客


【設計模式與Android】責任鏈模式——曹瞞兵敗走華容


【設計模式與Android】命令模式——軍令如山


【設計模式與Android】觀察者模式——千里眼與順風耳


【設計模式與Android】備忘錄模式——在齊太史簡


【設計模式與Android】迭代器模式——容器遍歷,細節隱藏


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五大连池市| 金堂县| 玉田县| 广饶县| 西昌市| 桃园县| 习水县| 丰城市| 炎陵县| 峡江县| 阿克苏市| 乌什县| 宁陵县| 深州市| 吴旗县| 平阴县| 历史| 黔江区| 浮山县| 黄梅县| 卓资县| 莒南县| 南投市| 普洱| 射阳县| 开江县| 林芝县| 大同市| 乌苏市| 迭部县| 阿克| 富平县| 北碚区| 菏泽市| 沛县| 佛教| 桐柏县| 高碑店市| 富源县| 海丰县| 玛纳斯县|