java - 适用于 Android/Java 的正确代码设计

标签 java android android-fragments

代码设计问题

我有一个类 Area ,它有一个名为 schools 的私有(private)实例变量。在 Area 的构造函数中,我初始化了我所有的学校,因为这是一个耗时的过程。 Area 中有一个实例方法,表示按传递学生列表的学校分组。我将这些学生分组到他们的学校并传回结果。

Area 类既要维护学校列表又要进行分组,是不是责任太大了?但我的主要问题是 Android 相关的: 我有多个需要使用此类的 fragment 。他们利用学校的数量、学校列表以及对它们进行分组。我不想每次打开新 fragment 时都实例化此 Area。我应该在哪里以及如何在 fragment 或其他地方实例化它们?我不能将它设为单例,因为 area 可以更改,反过来它需要重新实例化自己。我不能一次性调用 setSchools 。有任何想法吗?有没有我可以遵循的设计模式?

最佳答案

我的想法是有一个类来处理区域的创建(可能是您的应用程序类)。

然后,应用程序基本上可以将区域 map 保存到某种形式的区域 ID。如果您找到一个尚不存在的区域,您可以在此时创建它并将其存储在 map 中以供其他 fragment 稍后使用。

关于学生的排序,这似乎不是一个区域的工作。 也许使用像 StudentManager 这样的东西会更有意义。

这就是我的想象(简化形式):

class Student {
  String name;
}

class School {
  List<Student> students;

  boolean contains(Student) {
    return students.contains(student);
  }
}

class Area {
  List<School> schools;
}

class StudentManager {
  Map<School, Set<Student>> sortIntoSchools(Collection<Student> unsortedStudents) {
    Map<School, Set<Student>> result = new HashMap<>(); // Should use a decorated map here
    for(Student student : unsortedStudents) {
     for(Area area : areas) {
      for(School school : area.schools) {
        if(school.contains(student)){
          result.get(school).add(student);
        }
       }
      }
    }
  }
}

我相信您可以改进 StudentManager 类排序,但这种分离对我来说有些意义...

关于java - 适用于 Android/Java 的正确代码设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23096641/

相关文章:

android - Android API 指南对我来说有点不清楚 android :onClick XML attribute

java - 从 Activity 中更新 fragment ListView

android - Android Fragment是Linux进程吗?

java - 所实现的接口(interface)缺少可选方法/操作会导致错误

java - 错误 java.lang.IllegalArgumentException : Name for argument type [java. lang.String]

android - 您如何以编程方式在 Android ICS 及更高版本上截取屏幕截图?

android - 隐藏 ActionBar 菜单时 SearchView 聚焦

java - 当我单击按钮时导航屏幕打开,但当我再次单击它时它不会再次关闭

java - servlet 版本 getServletContext().getEffectiveMajorVersion() 给了我 2.5,而我正在使用 3

java - 使用 Java Prettify 实现 Android 应用语法高亮显示