<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)航:
     
    主站蜘蛛池模板: 国产美女精品久久久久久久免费| 亚洲无码精品浪潮| 久久久久噜噜噜亚洲熟女综合| 亚洲国产精品自在线一区二区| 亚洲AV永久无码精品网站在线观看| 丝袜捆绑调教视频免费区| 国产免费av片在线看| 国产亚洲精品看片在线观看| 亚洲人成电影网站| 2022免费国产精品福利在线| 成人爽A毛片免费看| 亚洲精品无码mv在线观看网站| 亚洲乱妇老熟女爽到高潮的片| 成人影片一区免费观看| 在线观看免费亚洲| 精品无码一区二区三区亚洲桃色| 美女被暴羞羞免费视频| 国产乱子精品免费视观看片| 亚洲无av在线中文字幕| 亚洲AV无码资源在线观看| 成人A片产无码免费视频在线观看| 成年人在线免费看视频| 亚洲精品美女久久久久99| 亚洲精品无码少妇30P| 美女内射无套日韩免费播放| 亚洲人午夜射精精品日韩| 亚洲一区二区三区在线观看网站| 国产综合精品久久亚洲| 亚洲AV成人无码天堂| 久久免费公开视频| 亚洲欧洲一区二区三区| 男女啪啪免费体验区| 6080午夜一级毛片免费看6080夜福利| 国产成人亚洲影院在线观看| 亚洲熟妇av午夜无码不卡| 57pao一国产成视频永久免费| 亚洲色爱图小说专区| 免费无遮挡无遮羞在线看| 黄色网址免费在线观看| 国产免费黄色大片| 波多野结衣亚洲一级|