一句話概述
策略模式作為一種軟件設(shè)計模式,指對象有某個行為,但是在不同的場景中,該行為有不同的實現(xiàn)算法。比如每個人都要“交個人所得稅”,但是“在美國交個人所得稅”和“在中國交個人所得稅”就有不同的算稅方法。
實現(xiàn)一個中國和美國的個人稅計算器
不用策略模式實現(xiàn)
public class TaxCalculator {
public static final int USA = 1000;
public static final int CHN = 1001;
// ......正常應(yīng)該有一大堆計算公式,這里簡單模擬
public double calculate(int country, int salary) {
double tax = 0;
if (country == USA) {
if (salary < 10000) {
tax = salary * 0.1;
} else if (salary >= 10000 && salary <= 20000) {
tax = salary * 0.2;
}
}
if (country == CHN) {
if (salary < 5000) {
tax = salary * 0.05;
} else if (salary >= 5000 && salary <= 10000) {
tax = salary * 0.1;
}
}
return tax;
}
}
用策略模式實現(xiàn)
1.定義策略接口:
public interface BaseTaxCalculateStrategy {
double calculate(int salary);
}
2.實現(xiàn)策略(這里用中國和美國舉例,如果需要可以方便添加其他國家的實現(xiàn))
public class USATaxCalculateStrategy implements BaseTaxCalculateStrategy {
@Override
public double calculate(int salary) {
double tax = 0;
if (salary < 10000) {
tax = salary * 0.1;
} else if (salary >= 10000 && salary <= 20000) {
tax = salary * 0.2;
}
return tax;
}
}
public class CHNTaxCalculateStrategy implements BaseTaxCalculateStrategy {
@Override
public double calculate(int salary) {
double tax = 0;
if (salary < 5000) {
tax = salary * 0.05;
} else if (salary >= 5000 && salary <= 10000) {
tax = salary * 0.1;
}
return tax;
}
}
3.開始應(yīng)用
public class TaxCalculatorByStrategy implements BaseTaxCalculateStrategy{
private BaseTaxCalculateStrategy mStrategy;
@Override
public double calculate(int salary) {
return mStrategy.calculate(salary);
}
public void setStrategy(BaseTaxCalculateStrategy strategy){
mStrategy=strategy;
}
}
策略模式比較簡單,以上就足夠了。