我有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