6 java inheritance design-patterns multiple-inheritance
我正在创建一个员工工资制度.我有一个抽象的Employee课.WageEmployee并Manager扩展Employee.然后程序员并SalesPerson扩展WageEmployee.
我的问题是我要创建一个SalesManager.在SalesManger具有thier工资加佣金和工资计算.所以他们有类型SalesPerson和Manager.
我应该创建一个接口以及应该SalesPerson扩展什么?
SalesManager从管理器扩展,然后创建SalesPerson一个接口是很自然的.但我不能因为它继承自WageEmployee......
我如何让它工作.正常吗?
abstract class Employee
{
String name;
Employee() {}
Employee (String nm) { name = nm; }
abstract double computePay();
void display () {}
void setHours(double hrs) {}
void setSales(double sales) {}
void setSalary(double salary) { System.out.println("NO!"); }
Run Code Online (Sandbox Code Playgroud)
}
Tim*_*Tim 10
叫我疯了,但你可能不需要子类来处理这里的不同付费方式.相反,请考虑使用策略模式来计算工资/销售佣金.这样,你就有了一个类Employee及其子类SalesEmployee; 每个都有一个属性作为一个PayStrategy对象,它可以有具体的子类WagePayStrategy和CommissionPayStrategy.如果您定义了正确的方法PayStrategy(可以是接口或抽象类),您可以让您的Employee实例向策略对象询问员工为某些输入(工作小时数,销售额等)获得的报酬.
考虑以下简单的例子:
interface PayStrategy {
public float getPay(float hoursWorked, float salesMade);
}
class WageStrategy implements PayStrategy {
public float getPay(float hoursWorked, float salesMade) {
return hoursWorked * 8.5;
}
}
class CommissionStrategy implements PayStrategy {
public float getPay(float hoursWorked, float salesMade) {
return salesMade * 0.5 + hoursWorked * 5.0;
}
}
abstract class Employee {
public PayStrategy payStrategy; // assign as needed
public float getPay(float hoursWorked, float salesMade) {
return this.payStrategy.getPay(hoursWorked, salesMade);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意如何在不需要其他类的情况下更改任何给定员工的薪酬策略,从而为您提供更多的灵活性和围绕该算法的封装.
| 归档时间: |
|
| 查看次数: |
409 次 |
| 最近记录: |