Java最佳实践:嵌套getter?还是代表?

时间:2015-03-31 20:41:17

标签: java android

毫无疑问,这是一个n00b问题,但我会很感激指导或链接。

我正在编写一个Android游戏应用程序,其中包括Activity和其他类之间的大量交互。在这样做时,我不确定哪个是更好的做法,例如调用" updatePlayer"方法

选择A是链接的getter,所以我可能有myActivity:

mGame.getPlayerList().getCurrentPlayer().updateScore(score);

选择B是委托(希望我正确使用该术语):

mGame.updateCurrentPlayerScore(score);

然后在游戏中:

playerList.updateCurrentPlayerScore(score);

然后在PlayerList:

currentPlayer.updateScore(score);

我可以看到选择B的优势,因为我可以自由地改变playerList和Game的结构和行为,但它确实增加了很多单行方法。

我是否正确思考?有选择C还是D?

2 个答案:

答案 0 :(得分:1)

就我个人而言,我一直认为编码风格是一种观点。如果您只是为自己编码,那么您可以使用最简单的方法。例如,在java中,您可以使用驼峰大小写(intVar)命名变量,但在python中,您使用下划线(int_var)。如果你在独立环境中使用python中的java和camel case中的下划线,那就无所谓了。

<强>然而...

在人们必须阅读和理解您的代码的地方,我会尝试尽可能地遵循传统的编码风格,只是为了更加清晰。

对于你的场景,你的船只漂浮着什么。传统上,getter和setter是java可接受的编码风格。

扩展您的课程也可能有助于不显示更高级别课程的实施。

答案 1 :(得分:1)

可能存在委派适当的情况,但使用链式getter通常是更好的方法。

看看以下示例: 使用委派

class A {
  void a1() {}
  void a2() {}
}

class B {
  A a;
  void b_a1() { a.a1(); }
  void b_a2() { a.a2(); }
  void b1() {}
  void b2() {}
}

class C {
  B b;
  void c_b_a1() { b.b_a1(); }
  void c_b_a2() { b.b_a2(); }
  void c_b1() { b.b1(); }
  void c_b2() { b.b2(); }
}

VS。使用普通链式 getters

class A {
  void a1() {}
  void a2() {}
}

class B {
  A a;
  void b1() {}
  void b2() {}
}

class C {
  B b;
}

对于所有情况而言,这不是一般规则,但第二个示例导致更清晰的设计,类与第一个示例中的耦合程度不同。