參考圖片功能:房型選擇 → 項目勾選 → 材質等級 → 實時價格計算 → 報價單生成。
interface QuoteItem {
BigDecimal calculate(); // 單項報價
}
class Room implements QuoteItem { // 房間基礎價
private List<QuoteItem> subItems = new ArrayList<>();
public void addItem(QuoteItem item) { subItems.add(item); }
public BigDecimal calculate() {
return subItems.stream().map(QuoteItem::calculate)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
}
class Decoration implements QuoteItem { // 裝飾項目
private Material material;
private BigDecimal area;
public BigDecimal calculate() { return material.getPrice().multiply(area); }
}
適用於動態增加計算規則(如:會員折扣、節日優惠、稅費附加):
interface PriceCalculator {
BigDecimal calc(BigDecimal base);
}
class DiscountDecorator implements PriceCalculator {
private PriceCalculator wrapped;
private BigDecimal rate;
public BigDecimal calc(BigDecimal base) {
return wrapped.calc(base).multiply(rate);
}
}
新手建議先實現簡單版,再重構引入設計模式。