毫无疑问,这是一个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?
答案 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;
}
对于所有情况而言,这不是一般规则,但第二个示例导致更清晰的设计,类与第一个示例中的耦合程度不同。