如果您在一個團隊中,並且程序員爲您提供了創建,讀取,更新和刪除方法的界面,您如何避免類型切換?避免類型切換
報價敏捷軟件工藝的清潔守則的手冊:
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