活到老,學到老

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            9 Posts :: 1 Stories :: 2 Comments :: 0 Trackbacks
              從今天開始,把常用的設計模式都簡單的整理一遍,希望每個星期能至少整理2個模式吧,先從簡單的策略模式開始。
              
              概念:它定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法的變化不會影響到使用算法的客戶。
              
              策略模式很簡單,實際上就是OO中的多態,舉個例子,某商場要進行促銷,對于普通顧客打88折,對于銀卡客戶在88折基礎上再滿400減160,對于金卡客戶在88折基礎上再滿400減200。
              
              
          UML圖如下所示:
              

              接口DiscountStrategy代碼如下:
              
          public interface DiscountStrategy {
              
          public double discount(double
           sum);
          }

              類GeneralDiscountStrategy類代碼如下:
              
          public class GeneralDiscountStrategy implements DiscountStrategy {

              @Override
              
          public double discount(double sum) 
          {
                  
          return sum * 0.88
          ;
              }


          }

              類SilverDiscountStrategy類代碼如下:
              
          public class SilverDiscountStrategy implements DiscountStrategy {

              @Override
              
          public double discount(double sum) 
          {
                  sum 
          = sum * 0.88
          ;
                  
          int t = (int) sum / 400
          ;
                  sum 
          = sum - t * 160
          ;
                  
          return
           sum;
              }

          }

              類GoldenDiscountStrategy代碼如下:
              
          public class GoldenDiscountStrategy implements DiscountStrategy {

              @Override
              
          public double discount(double sum) 
          {
                  sum 
          = sum * 0.88
          ;
                  
          int t = (int) sum / 400
          ;
                  sum 
          = sum - t * 200
          ;
                  
          return
           sum;
              }

          }

              類Cashier代碼如下:
              
          public class Cashier {
              
          private DiscountStrategy discountStrategy = new
           GeneralDiscountStrategy();

              
          public void getDiscountStrategy(CustomerLevel customerLevel) 
          {
                  
          switch (customerLevel) 
          {
                      
          case
           GENERAL:
                          discountStrategy 
          = new
           GeneralDiscountStrategy();
                          
          break
          ;
                      
          case
           SILVER:
                          discountStrategy 
          = new
           SilverDiscountStrategy();
                          
          break
          ;
                      
          case
           GOLDEN:
                          discountStrategy 
          = new
           GeneralDiscountStrategy();
                          
          break
          ;
                  }

              }


              
          public double calculate(double price, int num) {
                  
          return discountStrategy.discount(price *
           num);
              }

          }
          posted on 2011-04-06 22:56 simon.shen 閱讀(353) 評論(0)  編輯  收藏 所屬分類: 設計模式

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


          網站導航:
           
          主站蜘蛛池模板: 巴林左旗| 西吉县| 中牟县| 延庆县| 武隆县| 信丰县| 富川| 东源县| 汝阳县| 陇南市| 建平县| 临西县| 织金县| 枣强县| 武宣县| 江口县| 澄江县| 丰台区| 合水县| 上栗县| 鱼台县| 齐河县| 麻城市| 马尔康县| 高邑县| 沽源县| 南投县| 鄂托克旗| 高青县| 成安县| 崇仁县| 新巴尔虎左旗| 阜新| 宜都市| 江源县| 蕲春县| 西乌| 五原县| 桂东县| 双柏县| 舟曲县|