我正在开发一种棋盘游戏,包括将棋子放入牢房.只要在那里没有任何对手的棋子,你就可以把棋子放在棋盘上的任何地方(包括被占用的牢房).
现在我已经考虑过两种替代方法:
RedPiece.class片段
Run Code Online (Sandbox Code Playgroud)public boolean isAlly(RedPiece p) { return true; } public boolean isAlly(BluePiece p) { return false; } public boolean isAlly(GreenPiece p) { return false; }
显然,如果我想添加一种新颜色,我必须向每个类添加另一种方法.
Piece.class片段
public boolean isAlly(Piece that) {
return this instanceof that;
}
Run Code Online (Sandbox Code Playgroud)
后来这种方法对我来说似乎更好,因为在添加新颜色时我不需要做任何事情.
当然对于我的游戏来说这不是问题,因为所有部分都是相同的,我可以只创建一个枚举而不是新的类.但是,如果红队突然被赋予蓝色和绿色没有的特殊能力呢?
也许解决方案是添加一个字符串属性,说明他们属于哪个团队(红色玩家和蓝色玩家),但现在它的设计使得红色部分只属于红队.字符串"RED"绝对是您可以从课程中获得的冗余信息.
总结:在这里使用instanceof是否合理?谁能想到更好的方法?