抽象的用途是什么?

时间:2019-02-09 16:30:43

标签: java abstraction

我正在努力了解Java中Abstraction的整体用法。

我一直在研究此链接中的一个示例:https://javatutorial.net/java-abstraction-example 我了解它的实现,但我不明白为什么它甚至是必要的。如果要在两个子类中再次创建它们,为什么要在Employee类中创建他们的validateSalary方法?

1 个答案:

答案 0 :(得分:3)

抽象的整体用途是去耦。要使用Employee,不需要知道实现,只需要知道接口及其协定即可。例如,这用于Collections.sort(List<T> list)Collections.sort(...)的程序员无需知道特定列表的实现即可对其进行排序。这样做的好处是,实现支持符合List interface的将来代码。 This question在这方面是相关的(#selfPromotion)。更少的耦合会导致更少的摩擦和总体上更少的易碎代码。

也就是说,您提供的示例是一个糟糕的示例,因为它违反了Single Responsibility PrincipleEmployee实例没有责任计算工资。为此,您应该有一个单独的对象,该对象根据一个Employee实例和一些工作时间来计算工资。在内部,此Uber计算器可以使用Chain of Responsibility,每个Calculator的实施情况下,每个Employee持有一个Employee,将FullTimeEmployee与她/他的工资计算方式脱钩。这提供了可扩展性和灵活性的额外好处:如果工资的计算方式发生了变化(例如,公司更改了政策,以便每个FullTimeEmployee都获得相同的工资,或者公司希望通过周而不是按月),使用public class rotate : MonoBehaviour { public float speed; Vector2 pos; private void Start() { speed = 100; } private void Update() { if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); Vector2 posInScreen = touch.position; if (Camera.current.ScreenToWorldPoint(posInScreen) != null) { pos = Camera.current.ScreenToWorldPoint(posInScreen); } float Xposition = pos.x; transform.rotation = Quaternion.Euler(0, 0, Xposition*speed); } } } 的其他服务则不受影响)。