有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android/Java的正确代码设计

代码设计问题

我有一个类,比如说Area,它有一个名为schools的私有实例变量。在Area的构造函数中,我初始化了所有学校,因为这是一个耗时的过程。在Area中有一个实例方法,表示通过学生名单的学校分组。我把这些学生分组到他们的学校,然后把结果传回去

这个Area班需要维护一份学校列表以及分组,这是不是责任太大了?但我的主要问题是与Android相关的: 我有多个片段需要使用这个类。他们利用学校的数量、学校列表以及分组。我不想每次打开新片段时都实例化这个Area。我应该在片段或其他地方的何处以及如何实例化它们?我不能让它成为一个单例,因为area可以改变,反过来它需要重新实例化自己。我不能把setSchools当作是一次性的事情。有什么想法吗?有我可以遵循的设计模式吗


共 (1) 个答案

  1. # 1 楼答案

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

    然后,应用程序基本上可以将一张区域地图保存到某种形式的区域id。如果您发现一个尚不存在的区域,您可以在该点创建它,并将其存储在地图中,供其他片段稍后使用

    关于学生的分类,这似乎不是一个地区的工作。 也许使用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);
            }
           }
          }
        }
      }
    }
    

    我相信你可以改进学生经理的班级分类,但这种分类对我来说是有意义的