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

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

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

    posts - 297,  comments - 1618,  trackbacks - 0

             策略模式(strategy) 屬于對象的行為模式。
       1. 定義
            定義一系列的算法,把這些算法一個個封裝成單獨的類.策略模式是對算法的封裝,是把使用算法的責任和算法本身分割開,委派給不同的對象管理.
       2. 使用的原因
            在某些情況下,當客戶端需求不同時,會要求不同的算法實現,為使算法的增減,修改都不會影響環境和客戶端,可采用策略模式解決此種情況。  
       3. 適用的情況舉例
          
    1)一電子商務網站對各類書提供不同的折扣算法,有的沒有折扣,有的提供10%的折扣,那么在計算圖書的價格時,為防止通過過多而擴展性差的選擇語句來決定采取何種折扣算法,可采取策略算法有效解決問題;
           2)假使你是一推銷員,你腦海中已存儲了很多種推銷方法,每種方法適應一類人群,當你去推銷時,你要根據不同的對象去決定該用何種方式推銷;
           3)很多人在追求MM時,會根據不同的MM做出不同的追求策略,有的MM喜歡天南海北的玩,有的MM喜歡肆無忌憚的吃,有的MM喜歡成天成天的打扮,有的......,情場老手會根據具體情況具體分析,而有些不開竅的人,采取統一策略,而且在判斷失誤時不會做出策略改變,導致屢戰屢敗,都是因為策略模式沒學好的結果(啊哈,跟我一起上補習班)。
       4. 類圖結構及說明
            
    1) 簡略類圖
              
           2)說明
                左上邊的類為環境(Context)角色,它只有一個Strategy類的應用;
                右上方的類為抽象策略角色,通常為抽象類或接口;
                下方的三個類繼承自抽象策略類,它們屬于不同的具體策略實現類。它們包裝了相關的算法和行為。
       5. 應用舉例
            
    1)問題背景
                 在評議某老師的教學情況時,可能采取如下方式:
                 讓所教的班的學生對學校定出的評議老師的各項指標進行打分,最后統計該老師所得的平均分數,如果平均分在60分以上,就算教學合格。
                還可能采取如下方式:
                讓學生在“合格”、“基本合格”和“不合格”中勾選一項,最后統計認為選擇“合格”與“基本合格”的比例,如果超過60%就算教學情況合格。
                還可能有其他種方式。
             2)考慮方案
                a)最不“雅觀"的實現方案
                     將所有的業務邏輯都放在客戶端中,利用條件選擇語句決定使用哪一個算法。
                     缺點:當增加新的方式時,需大量修改客戶端代碼,使得客戶端難以維護。
                b)比a方案進了一步,考慮在客戶端加入繼承,不同方式的算法在不同的子類中實現,但因此時環境和行為耦合在了一起,造成兩者不能單獨演化。
                c)針對b方案的環境和行為耦合在一起了這個缺點,將環境和行為分開。環境負責的工作是負責維護和查詢行為類,而各行為類負責算法的實現。c方案的實現其實就是策略模式的應用。
            3)代碼模擬實現
                   待補充。
    參考書籍:《Java與模式》
                        《Patterns in Java》

    posted on 2007-04-11 00:11 阿蜜果 閱讀(2349) 評論(17)  編輯  收藏 所屬分類: Design Pattern


    FeedBack:
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 00:16 | αβγ
    沙發  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 00:24 | αβγ
    期待完善。希望能提供實例。  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 08:52 | 阿蜜果
    呵呵,昨晚累了,今晚繼續,啊哈
    今日廣州陽光真好噢!  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 09:13 | 劉甘泉
    我來給個實例
    //A策略
    public class Astragety implements Istragety{

    public String doSomething(String ori) {
    return ori+"AA";
    }
    }
    //B策略
    public class Bstragety implements Istragety{
    public String doSomething(String ori) {
    return ori+"BB";
    }
    }
    //策略接口
    public interface Istragety {
    public String doSomething(String ori);
    }
    //使用策略的上下文
    public class StragetyContext {
    private Istragety istragety;

    public void setIstragety(Istragety istragety) {
    this.istragety = istragety;
    }

    public void doWhatUWant(){
    System.out.println(istragety.doSomething("what u want:"));
    }
    }

    //開始使用吧~~~~~
    public class Stragety {
    public static void main(String[] args) {
    StragetyContext stragetyContext = new StragetyContext();
    stragetyContext.setIstragety(new Astragety());
    stragetyContext.doWhatUWant();
    stragetyContext.setIstragety(new Bstragety());
    stragetyContext.doWhatUWant();
    }
    }  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 09:20 | 藍色天空的囚徒
    贊一個.  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 09:21 | cresposhi
    so good  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 09:41 | coolfish
    學完了策略模式,希望樓主拿 模板方法 模式 做個對比,寫點心得. 深入理解 繼承和委派的區別.  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 10:09 | 劉甘泉
    模板模式和策略模式沒有相同的東西~~~~~~~
    模板模式是用于去除重復代碼的。。
    策略是用于不同的環境下的不同解決方法  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)[未登錄]
    2007-04-11 10:30 | 阿蜜果
    @coolfish
    多謝建議。  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 13:48 | @#$%
    不錯
    挺巧的  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 17:30 | G_G
    我 提個意見 把 
    這還有 硬代碼的 填充 stragetyContext.setIstragety(new Astragety());

    我們可以 用 Spring 來填充它哦!!!

    那這個 就無敵了 哈哈   回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 17:39 | cresposhi
    @G_G
    大哥,MM是在做設計模式的sample。。。怎么spring都來了。。。
    用spring填充那是另外幾種模式的結合。。。
    順便說一句IoC也就是DI模式也不是無敵的 :(  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 21:22 | 阿蜜果
    @@#$%
    ?巧什么
      回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-11 21:26 | 阿蜜果
    @劉甘泉
    嘻嘻,不錯!  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)
    2007-04-13 14:08 | hs
    八錯!八錯!  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)[未登錄]
    2007-11-09 10:51 | Steve
    Is this just identical with Bridge Pattern ?  回復  更多評論
      
    # re: 設計模式學習筆記--策略模式(待續)[未登錄]
    2007-11-09 11:04 | 阿蜜果
    <2007年4月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

          生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
          我的作品:
          玩轉Axure RP  (2015年12月出版)
          

          Power Designer系統分析與建模實戰  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關注blog

    積分與排名

    • 積分 - 2298117
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲日本香蕉视频观看视频| 久久精品国产亚洲一区二区| 日韩亚洲国产高清免费视频| aⅴ在线免费观看| 亚洲最大的成网4438| 人妻无码久久一区二区三区免费 | 巨胸喷奶水www永久免费| 国产亚洲精品无码拍拍拍色欲| 污视频网站在线观看免费| 大胆亚洲人体视频| 成年网站免费入口在线观看| 亚洲国产精品狼友中文久久久 | 亚洲高清资源在线观看| 日日麻批免费40分钟日本的| 亚洲日本久久一区二区va| 免费观看的av毛片的网站| 黄页网站在线免费观看| 亚洲伊人久久综合影院| a毛片在线还看免费网站| 久久水蜜桃亚洲av无码精品麻豆| 精品久久8x国产免费观看| 亚洲人成网站在线观看播放青青| 女人18毛片水最多免费观看| 日本一区二区三区免费高清在线| 亚洲线精品一区二区三区影音先锋 | 在线观看免费视频网站色| 亚洲尹人九九大色香蕉网站| 啦啦啦中文在线观看电视剧免费版 | 国产一精品一AV一免费| 亚洲一级毛片免费看| 无码专区一va亚洲v专区在线 | 一区二区3区免费视频| 亚洲尹人九九大色香蕉网站| 午夜一级毛片免费视频| 国产三级在线免费观看| 亚洲另类春色校园小说| 亚洲成av人片在线观看天堂无码| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 久久影视国产亚洲| 97在线观免费视频观看| 又粗又长又爽又长黄免费视频|