java扩展或包装类以添加额外的功能

时间:2010-01-27 21:11:10

标签: java list collections pagination wrapper

当你想在课堂上添加一些额外的信息时,你更喜欢哪种方式:你会扩展该类或围绕它做一个包装吗?

在我的特定场景中,我想添加一些从数据库中获取的List的分页信息。分页信息包括:

int currentPage;
int totalResults;
int containedResultsIndex;
int totalcontainedResults;

以及几种方法:

Boolean isNextPageAvailable();
Boolean isPrevPageAvailable();

您的意见,延伸或包装?

6 个答案:

答案 0 :(得分:8)

听起来你问你是否应该在你的情况下赞成继承或作文。我会说你没有创建List的新实现,而你真的不关心如何实现List,所以继承不适合你的问题。相反,您提供分页功能。我将使用List或其他一些通用集合创建一个通常包装(封装)分页逻辑的类。

答案 1 :(得分:4)

    在您的情况下,
  • 包装现有的List并使您的类实现List本身,将所有方法委派给原始列表(例如,在构造函数中传递)
  • 继承并不总是错误的,但在这种情况下,您将无法知道要扩展的类 - 它是ArrayList还是LinkedList

答案 2 :(得分:3)

太多的延伸是邪恶的,并且会使你的代码难以阅读/理解与组合一起,只需创建一个具有Collection的新类以及分页所需的额外成员。

答案 3 :(得分:1)

我更愿意尽可能地包装。特别是在你的List示例中 - 包装类可以包含任何列表类型,而扩展类与特定的具体超类相关联。

答案 4 :(得分:0)

即使扩展,也无法通过超类引用调用新方法。最好把它包起来。

答案 5 :(得分:0)

拥有优雅的PagingList(扩展List)是一种合适的方法。

  • 为什么要委托你可以继承你需要的东西?

  • 这就像FileReader和BufferedFileReader之间的关系(没有人会说这是不好的做法)。