Android與設計模式——狀態(State)模式

來源:互聯網
上載者:User

標籤:android狀態模式

在閻宏博士的《JAVA與模式》一書中開頭是這樣描述狀態(State)模式的:
   狀態模式,又稱狀態物件模式(Pattern of Objects for States),狀態模式是對象的行為模式。
  狀態模式允許一個對象在其內部狀態改變的時候改變其行為。這個對象看上去就像是改變了它的類一樣。


狀態模式的結構
  用一句話來表述, 狀態模式把所研究的對象的行為封裝在不同的狀態物件裡,每一個狀態物件都屬於一個抽象狀態類的一個子類。狀態模式的意圖是讓一個對象在其內部狀態改變的時候,其行為也隨之改變。狀態模式的示意性類圖如下所示:




  狀態模式所涉及到的角色有:

  ●  環境(Context)角色,也成上下文:此例中由DataConnecton充當,定義用戶端所感興趣的介面,並且保留一個具體狀態類的執行個體。這個具體狀態類的執行個體給出此環境對象的現有狀態。
  ●  抽象狀態(State)角色:定義一個介面IState,用以封裝環境(Context)對象的一個特定的狀態所對應的行為。
  ●  具體狀態(ConcreteState)角色:此例中由DcXXXState充當,每一個具體狀態類都實現了環境(Context)的一個狀態所對應的行為。
  ●  用戶端角色:此例中由DcController充當,管理和維護Context。(文字來源於網路)

此執行個體是Android4.4資料連線部分,DataConnecton繼承自StateMachine狀態機器類,StateMachine狀態機器類實現了State設計模式的應用,在WiFi、藍芽、資料連線這三種網路連接的管理實現都使用了State設計模式。

圖中看出,共定義了7種狀態子類,都是DataConnecton的內部類,資料連線在六種狀態中轉換,DefaultState是作為其他六個子類的父狀態類的,所謂父狀態類,就是當子狀態類無法處理(在processMessage方法中處理)時,就會交給父狀態類來處理。狀態的轉換是通過DataConnecton的transitionTo()方法來設定的。


原始碼(代碼太多,只貼Context管理State的代碼):

    private DataConnection(PhoneBase phone, String name, int id,                DcTrackerBase dct, DcTesterFailBringUpAll failBringUpAll,                DcController dcc) {        //[mr2] removed        //setDbg(false);        addState(mDefaultState);            addState(mInactiveState, mDefaultState);//mDefaultState作為父狀態            addState(mActivatingState, mDefaultState);            addState(mRetryingState, mDefaultState);            addState(mActiveState, mDefaultState);            addState(mDisconnectingState, mDefaultState);            addState(mDisconnectingErrorCreatingConnection, mDefaultState);        setInitialState(mInactiveState);//設定初始狀態    }


未完待續,有不對的地方,請指正。

Android與設計模式——狀態(State)模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.