1

我有一个程序请求网页,解析它并取决于结果决定下一步做什么。

例如:程序应该从页面中获取一些元素,我们称之为“目标元素”。如果程序确实请求并获得“someOtherElement”,它将继续执行。如果它获得了“aimElement” Executor 应该点击一些链接,执行结束,我们进入下一个任务。程序有 20 次尝试获取“aimElement”。并且“aimElement”将来可能会发生变化。

看起来很简单,但我真的不知道如何通过良好的 oo 设计来实现这一点。我在考虑两个对象:Task 和 Executor。Task 包含所有条件,Executor 接收 Task 作为参数,并根据 Task 的需要执行请求。但是如果 executor 将原始页面返回给 Task 本身,Task 就会变得复杂,并且它们之间会有很强的联系。如果 Executor 返回已经解析的页面元素,那么 Executor 将需要知道解析什么以及如何解析,并且也会很复杂,并且会有强连接。

我不知道我的解释是否清楚,但也许你可以给我一些设计模式的建议,或者分享你遇到类似问题的经验。

4

1 回答 1

2

我只会使用推送解析器并允许任务为他们感兴趣的任何事件注册自己。基本上,您的解析器解析文档一次并通知所有订阅者他们感兴趣的事物类型(比如“img with URL X”或“链接到 Y”)。

然后,您可以查询订阅者以查看下一步要做什么(在每个事件结束时/之后),或者让他们自己通过侦听器方法通知您。

最好的部分是我确信在 Java 中已经有一个用于 HTML 的推送解析器,因此您可以避免很多工作。

于 2013-01-13T18:34:21.143 回答