小额工资计划,根据员工一个月内工作的小时数向员工支付工资或金额(仅限小时工资员工)以下是我制作的两个班级图表之一:
此版本使用两个子类来定义两种类型的员工,并从Employee父类继承基本属性,这两个子类有自己的方法来支付这两种员工。
我的其他版本看起来像这样:
此版本根据支付的员工类型使用方法覆盖。
哪个更适合基于其他类及其关系的实现? 实施一个是否会产生任何重大影响?
答案 0 :(得分:3)
我根本不会将Employee子类化。我可能会将其建模为Employee HAS为PaymentStrategy,其中包含HourlyPaymentStrategy,SalaryPaymentStrategy等子类。
扩展原因:在Java和C#等静态类型语言中,对象在实例化后无法更改其类型。因此,使用继承,每小时员工永远不会成为受薪员工,而使用组合,您可以使用SalaryPaymentStrategy从HourlyPaymentStrategy实例替换他的PaymentStrategy属性。
答案 1 :(得分:1)
另一种可能性是只有一种员工类型,而是薪酬类型的层次结构。
abstract class PayType
{
public abstract decimal CalculateSalary();
}
class HourlyRate : PayType
{
}
class Salary : PayType
{
}
员工将拥有PayType属性。