传递对象或对象属性

时间:2011-02-10 12:56:29

标签: java oop

我有2个类,生成器和处理器。前者生成一个存储为成员属性的ArrayList。后者处理ArrayList。

我的主类实例化每个对象中的一个并调用适当的方法。

什么是更好的做法?

  1. 将Generator对象传递给Processor对象的进程方法
  2. 将Generator对象的ArrayList传递给Processor对象的进程方法

4 个答案:

答案 0 :(得分:4)

Processor是否有理由关注数据的来源,或者请求生成更多数据?如果没有,只需尽可能一般地传递​​数据 - 例如Iterable<T>Collection<T>List<T>

这样你的代码就不那么紧密耦合,也更容易测试 - 你甚至不必在测试Generator之前编写 Processor,如果有的话您的Processor单元测试存在问题,可能是由Processor中的错误引起的,而不是Generator中的错误。

答案 1 :(得分:0)

我倾向于传递生成器,而不是它的属性(通过方法暴露,我假设)。

为什么?我更喜欢将接口和耦合保持在更高的抽象层。通过传递对象而不是属性,我可以在稍后阶段更改生成器,并减少我必须重构的代码部分。

想象一下 - 在某个阶段,您可能不仅希望传递列表属性,还可能希望传递其他内容。通过传递更高级别的对象,您可以限制重构。

当然这完全取决于这个对象的使用范围。如果您决定传递属性列表,是传递列表本身,还是不可修改的副本

答案 2 :(得分:0)

我想知道为什么这些不是一个对象。如果处理器改变了Generator的状态,那么为什么这个方法不是Generator的一部分呢?更好的封装方式。使用Generator的方法的接口也会给你一些很好的灵活性。 Generator可以有一个Processor接口,您可以传入一个具体的实例来根据需要更改实现。

对象是状态和行为。处理器的组成可以让您坚持这一点,并且仍然可以灵活地更改对数据所做的操作。只是一个想法...

答案 3 :(得分:0)

从设计的角度来看,你应该创建方法

List<YourType> getList()

在Generator类中然后在main中调用它并将结果传递给Processor。

请注意,在这种情况下,发生器和处理器是独立的,彼此不“相互”,因此可以单独修改它们。而且方法返回List(不是ArrayList),因此接口也不依赖于列表实现。

最后一点。该列表是参数化的(List<YourType>),使其更安全。