<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    asklxf

    A java developer's notebook.

    常用鏈接

    統(tǒng)計

    積分與排名

    最新評論

    狀態(tài)模式之星際應(yīng)用

    一個對象有多種狀態(tài),在不同的狀態(tài)下,同一種方法有不同的行為。如果用swich-case語句,將有大量的條件分支和邏輯代碼混在一起。狀態(tài)模式將每個狀態(tài)封裝到一個獨立的類中,利用多態(tài)性使得不同狀態(tài)下同一種方法表現(xiàn)不同的行為。

    狀態(tài)模式的UML圖如下:

    按此在新窗口打開圖片

    星際中人族的機槍兵Marine有兩種狀態(tài):普通狀態(tài)和打了興奮針后的狀態(tài),兩種狀態(tài)下機槍兵的開槍頻率是不同的,我們用狀態(tài)模式來實現(xiàn)機槍兵的fire()方法。

    首先定義抽象狀態(tài)State接口,這個接口指定了機槍兵的fire行為:

    public interface State {
        public void fire();
    }


    State接口有一個fire()方法,我們實現(xiàn)兩個子類NormalState和ExcitedState,分別表示普通狀態(tài)和打了興奮針后的狀態(tài),并實現(xiàn)具體的fire方法:

    public class NormalState implements State {
        public void fire() {
           System.out.println("普通狀態(tài)每秒開槍1次。");
        }
    }

    public class ExcitedState implements State {
        public void fire() {
           System.out.println("興奮狀態(tài)每秒開槍2次。");
        }
    }


    最后,定義機槍兵類Marine,每個Marine的實例代表一個機槍兵:

    public class Marine {
        // 保持一個狀態(tài)類的實例:
        private State state = new NormalState();
     
        // 為機槍兵設(shè)置狀態(tài):
        public void setState(State state) {
           this.state = state;
        }
     
        // fire()方法,實際調(diào)用的是state變量的fire()方法:
        public void fire() {
           state.fire();
        }
    }


    最后我們看看如何在客戶端控制一個機槍兵的狀態(tài):

    public static void main(String[] args) {
        // 創(chuàng)建一個機槍兵的實例:
        Marine marine = new Marine();
        // 調(diào)用fire()方法:
        marine.fire();
        // 設(shè)置為興奮狀態(tài):
        marine.setState(new ExcitedState());
        // 再調(diào)用fire()方法:
        marine.fire();
    }


    對同一個Marine對象調(diào)用兩次fire()方法,屏幕輸出為:

    普通狀態(tài)每秒開槍1次。
    興奮狀態(tài)每秒開槍2次。


    可見機槍兵在兩種狀態(tài)下的同一個fire()方法有不同的行為。

    使用狀態(tài)模式的好處是每個狀態(tài)被封裝到一個獨立的類中,這些類可以獨立變化,而主對象中沒有繁瑣的swich-case語句,并且添加新的狀態(tài)非常容易,只需要從State派生一個新類即可。

    (參考:Design Patterns)

    posted on 2005-12-02 10:32 Xuefeng's Weblog 閱讀(152) 評論(0)  編輯  收藏 所屬分類: OO & Patterns


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 爽爽爽爽爽爽爽成人免费观看| 亚洲爆乳无码精品AAA片蜜桃| 中文字幕在线视频免费| 四虎影在线永久免费四虎地址8848aa| 亚洲 欧洲 视频 伦小说| 免费人成在线视频| 亚洲久热无码av中文字幕| 午夜影视在线免费观看| 免费无码AV一区二区| 亚洲一级片免费看| a级毛片高清免费视频| 中文字幕亚洲色图| 亚洲欧洲免费无码| 久久精品熟女亚洲av麻豆| 亚洲国产精品激情在线观看| xxxxx做受大片视频免费| 亚洲免费观看视频| 在线观看成人免费视频不卡| 久久亚洲精品国产精品婷婷| 免费萌白酱国产一区二区| 国产精品99爱免费视频| 亚洲大片在线观看| 97无码免费人妻超级碰碰碰碰| 亚洲精品乱码久久久久久V| 亚洲男人的天堂在线va拉文| 一区二区三区福利视频免费观看| 亚洲国产成人精品无码区在线秒播 | 亚洲av一本岛在线播放| 日本媚薬痉挛在线观看免费| 国产日韩久久免费影院| 亚洲性色成人av天堂| 又爽又高潮的BB视频免费看 | 亚洲中文字幕久久精品无码2021| 国产美女无遮挡免费网站| 国产一级婬片A视频免费观看| 91亚洲视频在线观看| 亚洲国产精品一区二区第一页免 | 免费成人在线电影| 亚洲熟伦熟女专区hd高清| 亚洲无av在线中文字幕| 欧美a级成人网站免费|