我有以下情況,我有不同種類的銷售算法來計算銷售價格。 FixedSaleStrategy不需要basePrice參數,而所有其他策略實現都需要它。有沒有避免這個冗餘參數的好方法?在應用策略模式時,是否有避免某些子類中未使用的方法參數的好方法?
public abstract class SalesStrategy
{
public abstract double GetPrice(double basePrice, double saleAmount);
}
public class AmountOffSale : SalesStrategy
{
public override double GetPrice(double basePrice, double salesAmount)
{
return basePrice - salesAmount;
}
}
public class FixedPriceSale : SalesStrategy
{
public override double GetPrice(double basePrice, double salesAmount)
{
return salesAmount;
}
}
首先要做的事情是......將參數改爲'decimal'而不是'double'。 **從來沒有**使用二進制浮點數來處理貨幣,因爲它們不能準確地表示貨幣值,甚至像'1.1'這樣簡單的值,舍入誤差在處理民族貨幣時非常重要。參見:http://en.wikipedia.org/wiki/Floating_point#Representable_numbers.2C_conversion_and_rounding – 2010-07-30 23:44:17