從今天開始,把常用的設(shè)計模式都簡單的整理一遍,希望每個星期能至少整理2個模式吧,先從簡單的策略模式開始。
概念:它定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法的變化不會影響到使用算法的客戶。
策略模式很簡單,實際上就是OO中的多態(tài),舉個例子,某商場要進行促銷,對于普通顧客打88折,對于銀卡客戶在88折基礎(chǔ)上再滿400減160,對于金卡客戶在88折基礎(chǔ)上再滿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);
}
}
|