我一直在阅读 Head First Design Patterns (最近才出现),并且正在阅读有关策略模式的内容,我突然想到这可能是在所有我在工作中使用的特定对象,但我对此有疑问。
这就是我的想法:
public interface ITax
{
decimal ProvincialTaxRate { get; set; } // Yes, I'm Canadian :)
decimal CalculateTax(decimal subtotal);
}
public SaskatchewanTax
{
public decimal ProvincialTaxRate { get; set; }
public SaskatchewanTax()
{
ProvincialTaxRate = new decimal(0.05f);
}
public decimal CalculateTax(subtotal)
{
return ProvincialTaxRate * subtotal + FederalTaxRate * subtotal;
}
}
public OntarioTax
{
public decimal ProvincialTaxRate { get; set; }
public OntarioTax()
{
ProvincialTaxRate = new decimal(0.08f);
}
public decimal CalculateTax(decimal subtotal)
{
return ProvincialTaxRate * subtotal + FederalTaxRate * subtotal;
}
}
您可能已经注意到没有声明 FederalTaxRate,这就是我想问的。那应该去哪里?
- 将它传递给每个具体 Itax 的构造函数似乎是多余的,并且会导致不正确的行为(所有税收计算器必须共享完全相同的联邦税率)。
- 同样,创建 Itax 的成员也会使它们不一致。
所有的税收计算器都应该继承自静态定义的其他类以及 Itax 吗?
public class TaxCalculator
{
public static decimal FederalTaxRate = new decimal(0.05f);
}