設計模式-模板方法模式使用
阿新 • • 發佈:2021-06-15
需求 根據不同商品 執行不同計價規則即不同折扣計費
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))); } } }