首页 > 解决方案 > 如何放置不适合任何类的方法

问题描述

我正在编写一个程序来实现纸牌游戏,但我无法弄清楚其中一种方法的放置位置:特别是检查一张牌是否大于另一张牌的方法,

    public boolean rankGreater(Card card1, Card card2) {
        return card1.getRankId() < card2.getRankId();
    }

我遇到麻烦的原因是因为我计划在策略模式的一个实现中使用这种方法来处理计算机控制的对手的行为,以及在我的Round类中跟踪每轮的最终获胜者;并且将 Round 一直传递到这个特定的策略中是没有意义的。我应该在哪里以确保高凝聚力的方式定义此方法?

我已经包含了我的班级关系的超级粗略图表: imgur 链接,因为我的声誉太低

编辑:卡是外部库的一部分

标签: javaoop

解决方案


如果你定义Card了自己

在类中实现方法Card

public class Card {
  ...
  public boolean rankGreater(Card card2) {
    return this.getRankId() < card2.getRankId();
  }
  ...
}

rankGreater(card1, card2)然后你会写而不是写card1.rankGreater(card2)

 

在java中,这样的事情通常使用接口来实现Comparable。这样,您可以使用预定义的方法,例如Collections.sort(...)Arrays.sort(...)
这里我rankGreater再次实现了一个例子来说明如何使用compareTo.

public class Card implements Comparable<Card> {
  @Override
  public int compareTo(Card other) {
    return Integer.compare(this.getRankId(), other.getRankId());
  }
  ...
  public boolean rankGreater(Card card2) {
    return this.compareTo(card2) < 0;
  }
  ...
}

如果你不能改变定义Card

Card在库中定义时,您不能简单地更改其定义。好吧,理论上你可以(只添加方法不会破坏事情),但我不推荐它,因为你每次更新或安装(例如在构建过程中自动mvn)库时都必须应用手动更改。

在这种情况下,请创建该方法public static并将其放入实用程序类中。如果你只需要在另一个类中,你也可以把它放在那里并制作它private static


推荐阅读