策略模式

一句話概述

策略模式作為一種軟件設(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;
    }
        
}

策略模式比較簡單,以上就足夠了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容