gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:50 25 4
gpt4 key购买 nike

代码设计问题

我有一个类 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com