少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
          狀態模式(state pattern)和策略模式(strategy pattern)的實現方法非常類似,都是利用多態把一些操作分配到一組相關的簡單的類中,因此很多人認為這兩種模式實際上是相同的。然而
          •在現實世界中,策略(如促銷一種商品的策略)和狀態(如同一個按鈕來控制一個電梯的狀態,又如手機界面中一個按鈕來控制手機)是兩種完全不同的思想。當我們對狀態和策略進行建模時,這種差異會導致完全不同的問題。例如,對狀態進行建模時,狀態遷移是一個核心內容;然而,在選擇策略時,遷移與此毫無關系。另外,策略模式允許一個客戶選擇或提供一種策略,而這種思想在狀態模式中完全沒有。 
          •一個策略是一個計劃或方案,通過執行這個計劃或方案,我們可以在給定的輸入條件下達到一個特定的目標。策略是一組方案,他們可以相互替換;選擇一個策略,獲得策略的輸出。策略模式用于隨不同外部環境采取不同行為的場合。我們可以參考微軟企業庫底層Object Builder的創建對象的strategy實現方式。 
          •而狀態模式不同,對一個狀態特別重要的對象,通過狀態機來建模一個對象的狀態;狀態模式處理的核心問題是狀態的遷移,因為在對象存在很多狀態情況下,對各個business flow,各個狀態之間跳轉和遷移過程都是及其復雜的。例如一個工作流,審批一個文件,存在新建、提交、已修改、HR部門審批中、老板審批中、HR審批失敗、老板審批失敗等狀態,涉及多個角色交互,涉及很多事件,這種情況下用狀態模式(狀態機)來建模更加合適;把各個狀態和相應的實現步驟封裝成一組簡單的繼承自一個接口或抽象類的類,通過另外的一個Context來操作他們之間的自動狀態變換,通過event來自動實現各個狀態之間的跳轉。在整個生命周期中存在一個狀態的遷移曲線,這個遷移曲線對客戶是透明的。我們可以參考微軟最新的WWF 狀態機工作流實現思想。 
          •在狀態模式中,狀態的變遷是由對象的內部條件決定,外界只需關心其接口,不必關心其狀態對象的創建和轉化;而策略模式里,采取何種策略由外部條件(C)決定。 
          posted on 2015-04-21 02:43 abin 閱讀(374) 評論(0)  編輯  收藏 所屬分類: PatternDesigns
          主站蜘蛛池模板: 曲麻莱县| 凤阳县| 万荣县| 辰溪县| 灵川县| 余江县| 桃园市| 怀宁县| 会昌县| 仁怀市| 永胜县| 肥乡县| 三明市| 连城县| 江川县| 彰化市| 丰原市| 临夏县| 甘泉县| 綦江县| 安陆市| 兰考县| 嫩江县| 临夏县| 井研县| 林州市| 昆山市| 鄂尔多斯市| 茂名市| 二连浩特市| 平定县| 廉江市| 榆社县| 商水县| 贡山| 平陆县| 余庆县| 宾川县| 灵寿县| 梨树县| 武义县|