gpt4 book ai didi

java - 如何处理 Java 中的可互换基类

转载 作者:行者123 更新时间:2023-11-29 08:17:59 25 4
gpt4 key购买 nike

我对我正在做的一些继承有疑问。基本上,我有一个名为 LineCalculator 的抽象类,正如它所暗示的那样,它计算方程的线。从那里,我在 LinearLineCalculator 中继承了这个基类,计算笛卡尔坐标系上的线,以及 PolarLineCalculator , 计算极坐标系上的线。

public abstract class LineCalculator {

// Begins calculating a line based on the parameters
protected final Path2D.Double calculateLine(...) {
}

// Takes in an X value, does something with it,
// and returns the resulting X and Y values
protected abstract double[] handlePoint(double x);
}

所以 LinearLineCalculator只是用一个方程计算出对应的Y值,而PolarLineCalculator将从方程和 X 值计算半径,并将其转换为极坐标(在这种情况下,X 充当 θ,以度或弧度为单位)。

LineCalculator然后以一种“对所有人免费”的方式计算直线,其中计算直线的线程尽可能快地获取和计算 X 和 Y 值,并将它们报告给基类。基类然后处理从线程计算的数据构造线。

我的问题是我已经实现了一个修改版本,它是按顺序计算的,其中基类在每个线程上阻塞,直到它获得第一个值。然后它等待第二个有序值,依此类推,允许它动态构建线。

这个继承模型工作得很好,因为我能够在不修改任何继承者的情况下修改基类并且让它仍然工作。但我希望能够互换实现,例如,对于某些行,以“对所有人免费”的方式计算它,对于某些行,按顺序计算。

我的问题是是否有一种模式或设计允许我更改基类实现,但保留父类(super class)实现而不违反 DRY 原则?

最佳答案

在我看来你真的想要组合,而不一定是继承。

我有一个计算器界面,带有矩形和极坐标实现。为执行计算的类提供您在其构造函数中初始化的计算器引用。这使您可以轻松地更换实现。您还需要一个 CalculatorFactory。

关于java - 如何处理 Java 中的可互换基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2892336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com