java - 面向对象设计问题

标签 java

我正在学习 OO 原则,为了练习,我正在用 Java 开发应用程序。

该应用是在每一局牌局结束后解析扑克网站发布的牌局历史文本文件,无论牌局来自哪个站点,都从文件中提取相同类型的数据。

牌局历史文件的格式可能因扑克网站而异。有些网站的每一手都采用非常易于阅读的风格,例如:

NL $0.25/$0.50 Texas Hold'em - Tuesday, June 22, 19:55:24 GMT 2010

和其他人有 XML 风格。

我的问题是:当从文本中解析上述行时,我是否应该有单独的类来解析每个元素?例如,我应该有一个带有 parseStakes() 方法的 StakesParser 类,然后是一个带有 parseCurrency() 方法的 CurrencyParser 类等等。或者我应该有一个可以解析该行并从中获取所有不同信息位的类吗?

为每个我想解析的东西都设置一个单独的类似乎更面向对象,但效率较低。有什么建议吗?

作为解析过程的结果,我想要的是一个 GameState 类,它可以保存一手扑克的所有信息。因此,无论手牌历史文件来自哪个站点,我都可以创建一个 GameState 类型的对象,其中包含由 HHParser 类解析的所有相关信息。

为此,我认为拥有一个必须实现的接口(interface)是个好主意,该接口(interface)将确保每个扑克站点的 HHParser 最终生成一个 GameState 类。因此接口(interface)将具有 parseStakes()、parseCurrency() 等方法。这是正确的方法吗?

让我更困惑的是,在不同的站点上,信息的顺序不同,所以我可能需要一个 Controller 类来确保根据文本文件所在的站点以正确的顺序调用每个方法来自。

关于华夫饼,我很抱歉,但如果您能提供任何关于最好做什么的指示,我将不胜感激。

非常感谢。 :-)

最佳答案

我想知道“每个元素的类”策略是否过于细化。我在想也许某种工厂可以为特定站点返回正确的解析器实现。

public class ParserFactory {
  public static Parser get(String url) {...};
}

因此,您最终会得到一个 Parser 接口(interface),该接口(interface)负责返回某种封装了扑克牌属性的 java bean。

public interface Parser {
  public Collection<Hand> parse();
}

并且您为每个可以获取手的站点实现解析器,从工厂返回正确的手。我可能会使用 Commons Digester用于 XML 站点和 ANTLR甚至非 XML 的正则表达式。

关于java - 面向对象设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3389361/

相关文章:

java - 使用 JUnit 5 的 spring-boot-starter-test

java - 如何将列表中的每个字段数据存储在字符串中?

java - 如果嵌入组件,Hibernate 不会创建实体表

java - Selenium 远程独立服务器 - 驱动程序未知

java - 数组越界异常

java - 员工商店的编辑方法。(使用Hashmap)

java - 从文件中读取文本并将每行中的每个单词存储到单独的变量中

java - 配置文件中忽略 spring.cloud.inetutils.ignoredInterfaces

java - 如何使用改进的 Java 8 迭代迭代和处理映射键/值

java - 如何发出仅更新提供的字段的 POST 请求?