【问题标题】:Java Design Questions - Class, Function, Access ModifiersJava 设计问题 - 类、函数、访问修饰符
【发布时间】:2011-02-15 17:12:09
【问题描述】:

我是 Java 新手。我有一些设计问题。

假设我有一个爬虫应用程序,它执行以下操作: 1. 抓取一个 url 并获取它的内容 2.解析内容 3. 显示内容

  1. 如何在实现函数或类之间做出决定? -- 解析器应该是爬虫类的一个函数,还是它本身应该是一个类,所以它也可以被其他应用程序使用? -- 如果应该是一个类,应该是protected还是public class?

  2. 如何在实现公共类或受保护类之间做出决定? -- 如果我必须创建一个类来从解析的内容中生成统计信息,例如,该类应该受到保护(因此只有爬虫类可以访问它)还是应该是公共的?

谢谢 罗恩

【问题讨论】:

  • 既然它看起来是一个简单的应用程序,您为什么不直接尝试一下对您来说最有意义的方法呢​​?如果你做出了错误的设计选择,很快你就会遇到一两个问题,修改你的设计,然后学习。 ;-)

标签: java class access-modifiers


【解决方案1】:

我喜欢将班级视为可以做特定事情“方法”的“人”。

在您的情况下,如果您告诉他是哪个 url,那么他可以获取 url 的内容。

然后是另一个人,他非常擅长解析内容。我认为他使用名为 rome 的工具来做到这一点,但我不确定。他保持私密(提示;))

然后我们有第三个人,他展示东西。他有点智障,只理解“另一个人”制作的东西,但没关系。

最后,这个项目需要一个老板,他向其他 3 个人下达命令并在他们之间传递信息。

ps:我从来没有想过要保护类或不保护类。通常它们只是公开的,没有任何具体原因。只要不疼,何必呢?

【讨论】:

  • 在遇到线程之前,我也曾经像您那样思考。如果您将对象视为可以调用方法的人,那么线程是谁/什么?然而,关于回答这个问题,可以这么想。
【解决方案2】:

对于这类问题,我见过的最佳指导是“面向对象设计的 SOLID 原则”。

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

这些原则中最基本的,并且可以回答您的第一个问题的是“单一职责原则”。这表明,“一个类应该有一个,而且只有一个,改变的理由。”换句话说,你的班级应该每个人都做一件事。如果您最终需要更改某件事的工作方式,那么您只有一个类可以更改,并且希望该类中只有一个地方可以进行更改。在您的情况下,您可能希望一个类从 URL 检索内容,另一个类将其解析为某种内存数据结构,另一个类来处理数据(如果需要),以及另一个类(或类)以您需要的任何格式显示内容。显然,您可以对类忘乎所以,但测试许多小型的、单一操作的类通常比测试一两个大的、包罗万象的类更容易。

关于公共与受保护的问题取决于您打算如何使用此代码。如果您的类可以在您的库之外独立使用,您可以考虑将其公开,但如果它完成某些特定的或与您的其他类相关的任务,它可能会受到保护。例如,从 URL 检索内容的类是一个很好的通用类,因此您可以将其公开,但是执行某些特定类型的数据操作的类可能在您的库之外没有用处,因此它可以是受保护。总的来说,它并不总是非黑即白,但最终,这通常都不是什么大不了的事。

【讨论】:

    【解决方案3】:

    我觉得安迪的回答很好。我有一些补充:

    如果您认为将来会扩展某个类,则可以将所有private 方法(如果有)设置为protected。这样,任何未来的扩展类也可以访问这些。

    我喜欢这样的规则,即方法的长度不应超过无需滚动即可看到其左括号和右括号 ({ }) 的长度。如果某个方法比这更长,请尝试将其拆分为多个方法(privateprotectedpublic,根据您的喜好)。这使代码更具可读性,并且还可以节省代码行数。

    假设一个方法变大了,你把它分成几个private 方法。如果这些新方法只在第一个“母亲”方法中使用,那么将所有这些都移到自己的类中是有意义的。通过这种方式,您将使原始类更小且更具可读性。此外,您将使新类的功能更易于理解,因为它不会与原始类的功能混淆。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-25
      • 2014-10-13
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 2013-12-01
      相关资源
      最近更新 更多