走自己的路

          路漫漫其修遠兮,吾將上下而求索

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            50 隨筆 :: 4 文章 :: 118 評論 :: 0 Trackbacks
          1. 狀態結構圖
           

          2. 詳細介紹
               我們把狀態機中的對象分為 “狀態對象的持有者” 和 “狀態對象”, 也就是Stateful 和 Status兩類。AbstractStatus 抽象類實現 Status接口主要定義了一個模板transit,在狀態轉換前和狀態轉換后完成一些操作,并且增加了狀態描述,方便記錄當前所在的狀態,比如log到db或者log到文件中。
          StatusManager是由很多個全局單例的狀態組成的,這些單例包含了所有StatusMachine中需要用到的狀態,Stateful對象作為函數的參數傳入到status的handleStatus方法中,這樣避免了一個Status對象和Stateful綁定在一起,減少了Status對象的個數,這才可以把它們設計為單例。

          3.功能函數介紹

          Stateful; 狀態對象的持有者,姑且就把它稱為“有狀態”對象,這個接口描述了“有狀態”對象的行為, getCurrentStatus - 獲取當前有狀態對象的狀態, setCurrentStatus: 改變當前有狀態的對象所持有的狀態, nextStatus:由StatusMachine調用改變“有狀態”對象的狀態。這個接口可以根據不同的應用添加不同的方法,因為狀態對象持有者的行為根據不同應用可變性比較大。

          Status: 狀態對象,描述對象的狀態,對象狀態所具備的行為。getStatusDesc:得到狀態的描述符, handleStatus: 處理當前狀態, nextStatus:根據命令將“有狀態”對象改變到下一個狀態, transit:根據命令改變“有狀態”對象的狀態,并在改變前和改變后做一些特殊的操作,比如log, 判斷是否是異常狀態等。

          AbstractStatus: 主要加入了描述字符串和異常狀態,并且實現了transit方法,一般流程,如果有不同的transit流程,即需要在之前和之后完成不同的操作,可以在子類中重寫transit方法。

          StatusManager:定義了StatusMachine所需要的所有Status對象,這些對象都是全局靜態單例的。

          StatefulObject: Stateful對象的實現

          StatusMachine: 主業務流程,主業務流程中需要操作一個或多個有狀態對象的狀態改變,調用“有狀態”對象的nextStatus即可。

          4. 簡單實現
          簡單實例


          posted on 2008-08-22 20:55 叱咤紅人 閱讀(1232) 評論(0)  編輯  收藏 所屬分類: Design and Analysis Pattern J2SE and JVM
          主站蜘蛛池模板: 额尔古纳市| 伊宁市| 南平市| 柳河县| 成都市| 双柏县| 枣强县| 尉犁县| 三亚市| 确山县| 新巴尔虎左旗| 澎湖县| 日土县| 夏邑县| 东平县| 本溪| 嵩明县| 辽宁省| 黄平县| 锦州市| 当雄县| 武强县| 当阳市| 博湖县| 额济纳旗| 普宁市| 攀枝花市| 调兵山市| 济源市| 巫溪县| 卓尼县| 柏乡县| 张家口市| 滕州市| 比如县| 化隆| 两当县| 千阳县| 湖北省| 大安市| 肥乡县|