【问题标题】:Gather info from xhtml in java: parser + visitor?从 java 中的 xhtml 收集信息:解析器 + 访问者?
【发布时间】:2013-05-24 13:36:54
【问题描述】:

我必须编写一段代码来加载远程网页、搜索链接、访问这些页面并从某些标签中收集一些信息...

你会怎么做呢?访问者模式在这里有什么帮助吗?如果是这样,我该如何使用它?

谢谢

【问题讨论】:

    标签: java design-patterns xhtml visitor-pattern


    【解决方案1】:

    一些cmets/建议

    • 不确定访客模式是否适合这里。访问者模式的一个典型场景是操作算法因应用算法的对象而异。
    • 解决这个问题的粗略方法是将算法嵌入到相关对象本身中,但这相当于混合数据和操作(违反关注点分离的精神
    • 访问者模式帮助我们将算法与其应用的数据区分开来。
    • check out an example 更好地了解访客模式。

    你的情况

    • 对象网页链接操作访问解析提取信息
    • 相同组操作应用于所有网页和链接。
    • 所以这里的操作算法不会因不同的网页和链接而改变,因此访问者模式不适合。
    • 从技术上讲,您仍然可以使用访问者模式,但这不是它的用途。

    你的问题,

    • 我认为它不是很复杂的设计问题。某些模式似乎可以解决问题,例如 Command Pattern(命令:extractLinkFromPagevisitLinkAndParseTags),但 IMO,对于这个简单的问题,这将是矫枉过正
    • 我会建议一种简单的方法,将逻辑托管在实用程序类中并在调用程序中使用相同的逻辑,
     class WebUtility{
     public List<String> parseLinks(String remotePageAddress){
     //Parse links
     }   
     public TageInfo extractTageInfo(String pageURL){
     //Extract the Tag information 
     }
     }
    

    这里 TagInfo 类将根据您的要求成为一个 pojo。

    这个类是无状态的,可以用作singleton可选您可以将构造函数设为私有,将方法设为静态。

    一旦你有了这个,你可以调用parseLinks来获取链接,然后通过调用extractTageInfo方法遍历链接列表来获取每个链接的标签信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多