首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 設計模式精講:策略模式重構計價邏輯,告別 if-else 硬編碼

     編輯:Java 綜合教學

模式定義

策略模式屬於行為型模式。核心思想:定義一族算法,封裝每個算法,使它們可互換。 將「使用算法」與「算法實現」分離,讓算法變化不影響客戶端。

角色結構

  • Context(環境角色):持有 Strategy 引用,委託具體策略執行。
  • Strategy(抽象策略):接口或抽象類,定義算法契約。
  • ConcreteStrategy(具體策略):實現具體算法邏輯。

適用場景

  1. 同一問題有多種處理方式,僅行為細節不同。
  2. 需安全封裝多種同類操作。
  3. 出現「多子類 + if-else/switch 選擇」的代碼惡臭。

實戰重構:交通工具計價系統

❌ 重構前:耦合度高,擴展需修改核心類

public class PriceCalculator {
    private static final int BUS = 1, SUBWAY = 2, TAXI = 3;
    public int calculatePrice(int km, int type) {
        if (type == BUS) return busPrice(km);
        else if (type == SUBWAY) return subwayPrice(km);
        else return taxiPrice(km);  // 新增出租車需改此處
    }
    // ... 私有計算方法
}

✅ 重構後:策略模式

1. 定義策略接口
public interface CalculateStrategy { int calculatePrice(int km); }
2. 實現具體策略
// 公交策略
public class BusStrategy implements CalculateStrategy {
    public int calculatePrice(int km) {
        int extra = km - 10;
        int price = 1 + (extra / 5) * 1;
        return (extra % 5 > 0) ? ++price : price;
    }
}
// 地鐵策略
public class SubwayStrategy implements CalculateStrategy { /* 分段計價邏輯 */ }
// 出租車策略
public class TaxiStrategy implements CalculateStrategy { public int calculatePrice(int km) { return km * 2; } }
3. Context 角色
public class TrafficCalculator {
    private CalculateStrategy strategy;
    public void setStrategy(CalculateStrategy strategy) { this.strategy = strategy; }
    public int calculatePrice(int km) { return strategy.calculatePrice(km); }
    public static void main(String[] args) {
        TrafficCalculator c = new TrafficCalculator();
        c.setStrategy(new BusStrategy());
        System.out.println("公交10公里: " + c.calculatePrice(10));
    }
}

優缺點總結

優點缺點
結構清晰、擴展性強、符合開閉原則策略類數量增加,需客戶端知曉所有策略
避免大量條件分支,邏輯解耦適用於行為相近的算法族,不適用於流程差異大的場景
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved