首页
学习
活动
专区
圈层
工具
发布

解耦OOP
EN

Stack Overflow用户
提问于 2010-08-17 19:46:06
回答 6查看 6.3K关注 0票数 0

我有一个简单的问题(使用Java)。我有两个类,一个代表一个文档,另一个代表一个单词。

文档类需要了解一些保存在Word中的单词的信息。我的问题是,分离这两个类的最好方法是什么?我有两个选择:

  1. 在类之间没有连接,每次我在文档中调用一个方法时,我都会传递给它一个Word对象(因此我有一个包含启动文档和Word的主方法的第三个类)。
  2. 在文档中声明一个Word的私有对象。

有一件事要注意,我只有一个字对一个对象和一个文档对象。我不为每一个新文档或单词创建一个新对象。我将整个文档的列表存储在文档中,将整个单词的列表存储在Word中。

谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-08-17 20:14:05

我不同意你对脱钩的理解。解耦不仅涉及哪些对象创建其他对象,还涉及哪些对象了解其他对象的行为,以及(关键是)如果单词发生变化,文档中需要更改什么(示例)。

不过,我也不明白你所说的这两个短语是什么意思:

我只有一个对象表示Word,一个对象用于文档。我不为每一个新文档或单词创建一个新对象。我将整个文档的列表存储在文档中,将整个单词的列表存储在Word中。

从文件开始。这个类的对象可以做什么?你好像在说

代码语言:javascript
复制
class Document {

     private List<??OfWhat??> allDocuments;
}

如果类文档包含一个列表,它是什么列表?我觉得你需要:

代码语言:javascript
复制
class Shelf {
      private List<Document> allDocuments;
}

class Document{
      private List<Word> wordInOneDocument;
}

class Word {
      private String wordContents;
}

现在,Shelf可以提供诸如getRecentDocumets()、findDocumentsContaining(字符串文本)等方法,而文档可以包含getWordCount()和insertParagraph(列表、开始)等。

为了进行更好的讨论,我们需要更多地了解你的想法,更多地了解你的行为。

我同意你的一般想法,那就是除了文件和文字之外,还有别的东西。可以合理调用方法的东西,如createDocument()和insertParagraph()

票数 4
EN

Stack Overflow用户

发布于 2010-08-17 19:52:27

在我看来..。

代码语言:javascript
复制
public class Document{

  private List<Word> words = new ArrayList<Word>();

  public void setWord(ArrayList<Word> words){this.words = words;}
  public ArrayList<Word> getWord(return this.words;)
}

这是个合理的方法。在本例中,您可以创建一个Document,而不需要任何Word's,这将生成一个空文档,该文档是有效的。

你仍然可以像你建议的那样创建一个三级,但是,我看不出它有什么好处。

票数 1
EN

Stack Overflow用户

发布于 2010-08-17 19:59:39

你的问题应该通过作文来解决。因此,拥有一个Word列表似乎是一种有效的方法。通过分离文档和文字,您已经实现了所需的去耦合。我不知道你的解耦合文档和Word对象的确切位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3506324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档