我挣扎了解Java的整体使用抽象的。
我已经工作过的例子在这个环节:https://javatutorial.net/java-abstraction-example我理解它的实现,但我不明白为什么它甚至是必要的。为什么他们的Employee类中提出,如果他们只是在2子类去做出再次calculateSalary方法?
整体采用抽象的脱钩。为了与Employee
工作,一个不需要知道实现,只是接口和它的合同。这是,例如,用于Collections.sort(List<T> list)
:Collections.sort(...)
的程序员并不需要知道具体名单的执行情况,以便对其进行排序。这提供了实现支持符合List
interface未来代码的好处。 This question是在这方面(#selfPromotion)有关。较低的偶合导致更少的摩擦和总那么脆弱代码。
这就是说,你所提供的例子是,因为它违反了Single Responsibility Principle一个贫穷的一个:它不是一个Employee
实例的责任来计算工资。对于这一点,你应该有一个单独的对象,计算工资的基础上,一个Employee
实例和一些工作时间。在内部,这个尤伯杯计算器可以使用Chain of Responsibility,持有一个Calculator
每Employee
-实施,脱钩她/他的工资是如何计算的Employee
。这提供了extensability和灵活性的好处:如果这样一个工资计算的变化(例如,也许该公司切换策略,以便每个FullTimeEmployee
赚取同样的薪水,也许该公司希望来计算的逐周而不是薪水一个由月的基础上),使用FullTimeEmployee
其他服务不受影响说)。