Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用接口和实现处理类依赖关系_Java_Architecture - Fatal编程技术网

Java 如何使用接口和实现处理类依赖关系

Java 如何使用接口和实现处理类依赖关系,java,architecture,Java,Architecture,我正在使用ObjectAid和Eclipse为我最新的Java项目生成UML类图,我现在有,在两个接口之间有一个依赖关系,以及其中一个接口的一个实现。这里,foo是我正在使用的图形库 在上一个示例中,FooCanvas将ITexture对象绘制到屏幕上,并且FooCanvas及其接口ICanvas都将ITexture对象作为其方法的参数 画布类中导致此依赖关系的方法如下所示: void drawTexture(ITexture texture, float x, float y); 此外,我还

我正在使用ObjectAid和Eclipse为我最新的Java项目生成UML类图,我现在有,在两个接口之间有一个依赖关系,以及其中一个接口的一个实现。这里,
foo
是我正在使用的图形库

在上一个示例中,
FooCanvas
ITexture
对象绘制到屏幕上,并且
FooCanvas
及其接口
ICanvas
都将
ITexture
对象作为其方法的参数

画布类中导致此依赖关系的方法如下所示:

void drawTexture(ITexture texture, float x, float y);
此外,我还尝试使用Java的泛型对方法签名进行修改:

<T extends ITexture> void drawTexture(T texture, float x, float y);
void drawTexture(T纹理、浮动x、浮动y);
其结果是一个类图,其中只有接口和实现类之间的依赖关系,而画布对象对纹理没有依赖关系。我不确定这是否更理想


接口和实现对另一个接口的依赖性是一种预期模式,还是将实现与其接口依赖性“隔离”是典型的和/或可能的?或者通用方法是理想的解决方案吗?

您的问题在于您试图解决错误的问题。面向对象设计的一个要点是健壮性和灵活性,即在不更改/破坏其他代码的情况下,可以更改某些实现的程度

你想问的是某种模式是否理想?但问题是:“理想”是什么?我将引用Scot Meyers的文章,这篇文章是关于C++的,但是他试图进行的概念不适用于语言。 封装是一种手段,而不是目的。封装本身并没有什么可取之处。封装之所以有用,只是因为它在我们的软件中产生了我们关心的其他东西。特别是,它具有灵活性和健壮性

你应该问的问题是:

有多少代码可能被破坏是为了计算可能被破坏的函数 影响也就是说,如果更改一个实现会导致更多 与更改另一个功能相比,可能会导致功能中断 实施

关于你的例子,别人告诉你什么是理想并不特别容易。您是否应该公开
ITexture
接口?您是否应该引入一个名为
IDrawable
的新接口来扩展纹理?目前的方法还可以。但实际上我不知道,因为我不知道实现!如果更改纹理实现,可能一切都会中断**这是一个只有你才能回答的问题,同时考虑到我上面提到的几点:

  • 如果您更改了ITexture实现,有多少代码需要更改或将中断
  • 当前的实现是否足够健壮
  • 使用当前的实现,您可以扩展系统多少

ICanvas和ITexture中公开了哪些方法?也许您可以向我们介绍更多的实现,否则,正如我在回答中所说,很难判断。在drawTexture中,使用了哪些方法?