初始化相互依赖的对象时,最佳实践是什么?

3
我一直在尝试通过创建练习 Android 应用程序来提高我的 (目前较差的) Java 技能。在我的应用程序中,每个屏幕都由一个单独的类来管理输入、逻辑和渲染处理。
对于一些类而言,它们变得过于庞大,难以轻松理解,因此我决定将代码移动到几个分类的类中,并在主屏幕类中以对象的形式调用它们。例如:
public class Screen {

 ScreenA a;
 ScreenB b;
 ScreenC c;

 public Screen() {
  a = new ScreenA();
  b = new ScreenB();
  c = new ScreenC();
 }

 public void doStuff() {
  a.method();
  b.method();
  c.method();
 }
}

我想了解的是这种方式是否是提高代码可读性的正确方法,以及它是否对内存使用/处理速度产生任何影响。例如,调用静态方法是否是更好的选择?
此外,当类彼此依赖时,答案是否会改变?例如,如果ScreenB中的方法需要调用ScreenA中的变量或方法?我认为以下两个示例都可以,但我不知道最佳实践是什么:
public class Screen {

 ScreenA a;
 ScreenB b;
 ScreenC c;

 public Screen(){
  a = new ScreenA();
  b = new ScreenB(a);
  c = new ScreenC(a,b);
 }

 public void doStuff(){
  a.method();
  b.method();
  c.method();
 }
}

public class ScreenB {

 ScreenA a;

 public ScreenB(ScreenA a) {
  this.a = a;
 }
}

或者:

public class Screen {

 ScreenA a;
 ScreenB b;
 ScreenC c;

 public Screen(){
  a = new ScreenA();
  b = new ScreenB();
  c = new ScreenC();
 }

 public void doStuff(){
  a.method();
  b.method(a);
  c.method(a,b);
 }
}
1个回答

4
我想了解的是,这是否是提高代码可读性的正确方法,以及它是否对内存使用/处理速度产生任何影响。例如,调用静态方法是否是更好的选择?
你所做的实质上是将不同的职责分配到不同的类中并封装行为。这就是面向对象编程的全部内容,Java 是为面向对象编程而建立的。相比于调用静态方法,实例化对象会有一定的成本,但你永远不应该害怕这样做。静态方法不允许封装、继承、依赖注入等许多其他使 OO 应用程序成为良好软件的功能。
此外,当类彼此依赖时答案是否会改变?例如,如果 ScreenB 中的方法需要调用 ScreenA 中的变量或方法,则我认为下面两个示例都可以使用,但我不知道哪个是最佳实践。
一个决定参数与类属性的经验法则是:你总是会使用相同的参数吗?如果是,则它们不是参数,而是状态应传递给构造函数。如果不是,则可能作为参数使用。
另一个好指标是:有多少方法需要相同的参数来实现其功能?如果有许多需要这些参数的方法,则属性可能比参数更有意义。

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