如果您在一个团队中,并且程序员为您提供了创建,读取,更新和删除方法的界面,您如何避免类型切换?避免类型切换
报价敏捷软件工艺的清洁守则的手册:
public Money calculatePay(Employee e)
throws InvalidEmployeeType {
switch (e.type) {
case COMMISSIONED:
return calculateCommissionedPay(e);
case HOURLY:
return calculateHourlyPay(e);
case SALARIED:
return calculateSalariedPay(e);
default:
throw new InvalidEmployeeType(e.type);
}
}
有几个问题与此功能。首先,它很大,并且当添加新的雇员类型时,它将会增长。其次,它显然不止一件事。第三,它违反了单一责任原则7(SRP),因为有多个原因需要改变。第四,它违反了开放封闭原则8(OCP),因为每当添加新类型时它必须改变。但是这个 函数可能最糟糕的问题是,有无限数量的其他函数将具有相同的 结构。例如,我们可以有
isPayday(Employee e, Date date),
或
deliverPay(Employee e, Money pay),
或他人的主机。所有这些都会有相同的有害结构。
这本书告诉我使用工厂模式,但它的方式让我觉得我不应该使用它。
再次引用这本书:
的解决了这个问题(见列表3-5)是埋藏在地下 抽象工厂,9 switch语句,绝不让任何人看到它。
开关语句是否丑陋?
这不是PHP代码.... – 2010-01-16 21:33:18
我删除了标签。 – 2010-01-16 21:42:35
您可能想要接受答案。 – 2010-01-16 22:25:22