Closed. This question is opinion-based 。它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文来回答。

7年前关闭。



Improve this question




有人告诉我根据以下代码示例开发我的代码:
Class Dogs{
   List<Dog> listOfDogs = new ArrayList<Dog>();
   // Setters, getters...
}

Class Dog{
   // Attributes and methods
}

问题是:为什么最好将 Dogs 类实现为 Dog 对象的 ArrayList 的容器,而不是仅仅引用一个简单的 ArrayList。
这被认为是封装吗?

最佳答案

基本上,创建 Dogs 类为您提供了额外的间接层。

这意味着所有其他代码将仅引用(即使用) Dogs 类,而不是内部列表。反过来,这意味着每当您决定在内部从使用列表切换到使用纯数组(或为此改变Dogs的实现)时,您都可以轻松地做到这一点。

这是它的动机。至于它是否“更好”的问题,这在很大程度上取决于您是否可以通过稳定的 Dogs 的 API 来限制内部容器的使用。如果可以,创建 Dogs 类是合理的。否则,继续使用 List 会更简单更容易。

上述“稳定 API”的一个示例是访问者模式的应用程序。在这种情况下,Dogs 类应该有一个接受访问者参数的 visit() 方法。访问者“知道”如何处理 Dog ,但完全不知道 Dogs 内部结构。这是一件好事。

10-08 18:40