什么设计模式更好?

3

当编写一个带有两个对象作为参数的函数时,比如比较函数或向量求和,哪种设计模式更好呢?

1)将函数编写在对象类内部,并仅获取第二个对象。

2)编写一个静态函数的外部类,该类将获取两个对象。

为什么以及何时使用这些方法?


2
@Dervall 我认为这并不重要。任何高级面向对象编程语言都可以。 - Vadiklk
你的问题太模糊了。我们需要知道这个函数将会做什么,它具体返回什么。 - Jason Evans
@Vadiklk,语言确实很重要,因为设计模式通常是特定于某种语言的:http://norvig.com/design-patterns/ - piokuc
@piokuc 但对于那个特定情况来说,这是真的吗? - Vadiklk
@Jason Evans 举个例子,有两个对象和一个返回值的比较函数。 - MoonBun
@Vadikkl 我认为这个问题有点太模糊了,无法自信地回答1或2,至少对我来说,如果知道这个函数应该做什么,那就更容易了。但例如在C++中,这是一种具有函数重载的语言,我会说第二个选项通常更强大和灵活。此外,该函数不必是类中的静态函数,而只是一个自由函数。 - piokuc
2个回答

3

在Java中,你有一个Comparable.compareTo(o1)方法,它代表一个对象并以第二个对象作为参数执行:

apple.compareTo(orange);

还有一个Comparator.compare(o1,o2)的抽象:

comparator.compare(apple, orange);

这两种方法都没有过时,也没有被认为更好。它们在不同的场景下使用:

  • 如果水果有一个固定的、自然的“顺序”,将其放入Fruit类中。
  • 如果可以通过多个不同的比较方式来比较水果(大小、重量、颜色、口感等),则有几个比较器,并且需要在需要时使用其中任何一个比较器。

你甚至可以将它们结合起来:只要默认顺序适合你,就采用默认排序(在Fruit中编码)。如果某天你需要不同的顺序,则选择特定的比较器。

我相信这种方法可以扩展到其他类似的情况和语言中。


0

在我看来,从.NET背景出发:如果任何对象可能为空,请使用静态方法。

如果第一个(左侧对象)肯定不为空,并且您希望使继承类能够提供其自己的相等性方法实现,则使用实例方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接