我有3個班,二繼承1:嵌套基類
public class Employee {
private virtual double getBonus() { ... }
private virtual double getSalary() { ... }
}
public class Nepotism : Employee {
private double getBonus() { ... }
}
public class Volunteer : Employee {
private double getSalary() { ... }
}
所以,問題是有時候會有志願者誰得到裙帶關係獎金 - 是有一些方法寫的構造函數允許覆蓋/嵌套基地類是這樣的:
Employee Bill = new Volunteer(new Nepotism());
我想是這樣的:
public class Volunteer : Employee {
private Employee _nest;
public Volunteer(Employee nest)
: base() {
_nest = nest;
// now what?
}
}
基本上我想要一些對象有兩個類的覆蓋。
我想避免編寫重寫方法來檢查嵌套類。
getSalary() {
return (nest != null) ? nest.salary : salary; // I want to avoid this if I can
}
我該怎麼做?我在正確的軌道上嗎?我離開了嗎?
在您的模型中,員工確定該員工的工資。這與現實世界相匹配嗎?不可以。當代碼更準確地模擬業務流程時,您可能會發現您的面向對象設計更順暢;實際決定員工工資的是組織的補償政策*。如果薪酬政策發生變化,那麼您希望僅在一個地方更新代碼,而不是在六個不同的員工班級中更新代碼。因此,制定一個代表公司政策的課程,並將規則放在那裏。 – 2010-06-24 19:47:30
同意 - 這就是爲什麼我與jrista的答案。這將允許將政策應用於獎金,薪水和其他未來薪酬方式。 – willoller 2010-06-24 20:29:18
儘管getSalary方法可以訪問規則引擎或某些其他(分離的)源工資信息。 – willoller 2010-06-24 20:36:58