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

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

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

    隨筆-348  評論-598  文章-0  trackbacks-0
    在 Strategy Pattern中,當一個任務控制器需要處理某項事物的時候,它可以命令他所控制的事務讀取一個configuration file,然后根據這個file將一些配置信息傳遞給一個接口從而調用相應的信息,而這個接口可能是一個Aggregation的接口,這個Aggregation可能是一組規則或者內容不一樣,但具有相同的類型或者特點的事務,可以用一個Abstract class讓他們繼承,
    這樣統一將對象交給固定接口,而外部只要調用這個接口即可。
    以下是“四人幫”的說法。
    Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.[6]





    public class TaskController {
      
    public void process () {
         
    // this code is an emulation of a
         
    // processing task controller
         
    // . . .
         
    // figure out which country you are in
         CalcTax myTax;
         myTax
    = getTaxRulesForUS();
         SalesOrder mySO
    = new SalesOrder();
         mySO.process( myTax);// 當然你還可以讓myTax=getTaxRulesForCan();這樣mySo.process(myTax)就會按照加拿大的稅率處理
      }

      
    private CalcTax getTaxRulesForUS() {
         
    // In real life, get the tax rules based on
         
    // country you are in.  You may have the
         
    // logic here or you may have it in a
         
    // configuration file
         
    // Here, just return a USTax so this
         
    // will compile.
         return new USTax();
      }

    }


    public class SalesOrder {
       
    public void process (CalcTax taxToUse) {
          
    long itemNumber= 0;
          
    double price= 0;

          
    // given the tax object to use

          
    // . . .

          
    // calculate tax
          double tax=
             taxToUse.taxAmount( itemNumber, price);
       }

    }


    public abstract class CalcTax {
       
    abstract public double taxAmount(
          
    long itemSold, double price);
    }


    public class CanTax extends CalcTax {
       
    public double taxAmount(
          
    long itemSold, double price) {
          
    // in real life, figure out tax according to
          
    // the rules in Canada and return it
          
    // here, return 0 so this will compile
          return 0.0;
       }

    }

    public class USTax extends CalcTax {
       
    public double taxAmount(
          
    long itemSold, double price) {
          
    // in real life, figure out tax according to
          
    // the rules in the US and return it
          
    // here, return 0 so this will compile
          return 0.0;
       }

    }


    實際整個Strategy的核心部分就是抽象類的使用,使用Strategy模式可以在用戶需要變化時,修改量很少,而且快速.

    Strategy和Factory有一定的類似,Strategy相對簡單容易理解,并且可以在運行時刻自由切換。Factory重點是用來創建對象。

    Strategy適合下列場合:

    1.以不同的格式保存文件;

    2.以不同的算法壓縮文件;

    3.以不同的算法截獲圖象;

    4.以不同的格式輸出同樣數據的圖形,比如曲線 或框圖bar等



    ---------------------------------------------------------
    專注移動開發

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2007-04-07 17:23 TiGERTiAN 閱讀(287) 評論(0)  編輯  收藏 所屬分類: Design Patterns

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲av日韩综合一区在线观看| 1000部拍拍拍18勿入免费视频下载| 亚洲av无码成人影院一区| 99久久国产免费-99久久国产免费| 亚洲日韩av无码| 国产午夜成人免费看片无遮挡 | 亚洲黄黄黄网站在线观看| 久久久久亚洲AV成人网| 亚洲男女性高爱潮网站| 一级成人a毛片免费播放| 中文字幕人成无码免费视频| 亚洲综合网美国十次| 国产卡一卡二卡三免费入口| 亚洲女子高潮不断爆白浆| 免费无码黄网站在线看| 水蜜桃亚洲一二三四在线| 亚洲精品免费在线| 456亚洲人成影院在线观| jizz在线免费观看| 女人让男人免费桶爽30分钟| 亚洲人成人无码网www电影首页| 男人j进入女人j内部免费网站 | 亚洲日产韩国一二三四区| 久久免费精品视频| 亚洲AV无码国产精品色| 怡红院免费的全部视频| 国产无遮挡吃胸膜奶免费看视频| 精品一区二区三区免费毛片| 超清首页国产亚洲丝袜| 最近2019中文字幕免费直播| 亚洲aⅴ无码专区在线观看| 国内精品99亚洲免费高清| 日本最新免费网站| 免费国产草莓视频在线观看黄| 亚洲妇熟XXXX妇色黄| 精选影视免费在线 | 亚洲精品免费在线| 亚洲国产一级在线观看| 99视频在线免费看| 精品免费AV一区二区三区| 久久这里只精品99re免费|