1. 程式人生 > 其它 >設計模式-模板方法模式使用

設計模式-模板方法模式使用

需求 根據不同商品 執行不同計價規則即不同折扣計費

1.商品計算的功能介面

2.模板類 實現功能介面

    公共計算方法

    特殊計算方法

    重寫功能介面方法即模板方法 定義計算的規則

3.水果類商品 家電類商品為 模板類子類 重寫各自特殊計算方法

結果如下

程式碼如下

public class TemplateMethodTest {

    public static void main(String[] args) {
        //計算水果類商品
        GoodsService fruitService = new FruitService();
        fruitService.calculate(
10); System.out.println("======================"); //計算家電類商品 GoodsService homeAppliancesService = new HomeAppliancesService(); homeAppliancesService.calculate(12); } /*** *功能描述 商品服務介面 */ interface GoodsService { /** * 計算金額 *
@param amount 購買數量 */ void calculate(int amount); } /** * 模板類 */ static abstract class AbstractGoodsService implements GoodsService { /** * 公共費用計算邏輯 * @paramt * @return 返回金額 */ private BigDecimal commonCalculate() { System.out.println(
"執行公共費用計算:..."); return new BigDecimal("2.00"); } /** * 特殊的計算邏輯 * @param amount 購買數量 * @return 返回金額 */ protected abstract BigDecimal specificCalculate(int amount); /** * 模板方法 定義計算流程規則 */ @Override public void calculate(int amount) { // 完成通用的邏輯 BigDecimal money = commonCalculate(); // 完成特殊的邏輯 money = money.add(specificCalculate(amount)); System.out.println("共計:"+money); // 其他操作.... } } static class FruitService extends AbstractGoodsService { //九九折扣 @Override public BigDecimal specificCalculate(int amount) { System.out.println("執行水果類商品的優惠政策"); return new BigDecimal("0.99").multiply(new BigDecimal(String.valueOf(amount))); } } static class HomeAppliancesService extends AbstractGoodsService { //八折 @Override public BigDecimal specificCalculate(int amount) { System.out.println("執行家電類商品的優惠政策"); return new BigDecimal("0.8").multiply(new BigDecimal(String.valueOf(amount))); } } }