0

如何设计我的 Java 类以正确扩展 Utility 类?这是我目前如何执行此操作的屏幕截图,但我怀疑有更好的方法可以做到这一点?我在这里使用正确的面向对象设计吗?我这样做是因为既需要扩展所需的LoadableComponent 类,又需要访问我自己的 WebDriverUtils 实用程序类中的所有静态方法。我正在寻找一个更好的主意,因为我不是受过正规教育的程序员。

换句话说,Utility 类不是“is a”,也不是“has a”,那么它如何适应 oop 的世界呢?

如果您想查看我如何实现此图的示例,我在 GitHub 上编写了一些代码,请在此处查看我的项目。如果有人想发布一个正确方法的图表,那也很棒。

在此处输入图像描述

注意:在此 Web 浏览器测试自动化项目的图表中,TabIFrameOne 和 tabIFrameTwo 是页面对象,用于处理 iframe 何时完成加载和识别框架中可以与之交互的元素的识别。DefaultPage 是主浏览器窗口 DOM,并不代表 iFrame 内的 DOM。每个 iFrame 类都使用 WebDriver PageFactory.initObjects() 来加载 Web 元素。

4

2 回答 2

3

我会说继承在这里不是一个好主意。一个页面可能有一个实用函数,但它不会是一个实用函数。

继承意味着 IS-A:如果类 A 扩展 B,那么类 A IS-A B。您必须能够在每个需要 B 的上下文中使用 A 的实例。

组合意味着HAS-A。更喜欢组合而不是继承。

我也不喜欢将对象映射到 HTML Web 组件的面向对象设计。太耦合了...

于 2013-03-22T17:35:28.343 回答
1

我最终通过将“私有 WebDriver”对象的实例传递给我之前尝试扩展的类来部分解决了这个问题。这允许我将 WebDriver 对象更改为实例变量而不是静态共享对象。

这是我的解决方案的图表。它比以前好。也许它仍然可以改进。 在此处输入图像描述

最终,我可能会使用防御者方法来解决这个问题。这是我现在在这里用于我的GitHub 项目的模式。

于 2013-04-01T18:49:34.260 回答