Java 如何进行良好实践:在实用程序中映射 Class
Java how to good practice : Map in Utility Class
我可以像这样使用实用程序 class 吗?
public final class ProfessorDirectory {
private static Map<String, Professor> directory = new HashMap<>();
private ProfessorDirectory() {
throw new IllegalStateException("Utility Class");
}
static void addProfessorsFromDescription(String description) {
String regex = "(?<=\n).* .*(?=\n)";
Matcher m = Pattern.compile(regex).matcher(description);
while (m.find()) {
String professorName = Professor.formater(m.group(0));
directory.put(professorName, new Professor(professorName));
}
}
public static Professor get(String firstName, String lastName) {
return directory.get(Professor.formater(firstName, lastName));
}
}
我用它创建了一个库,您可以在其中检索老师的计划。
使用示例:
Planning professorPlanning = schedules.getPlanningOf(ProfessorDirectory.get("Jack", "Sticky"));
ProfessorDirectory
是内部初始化的,永远不应由用户初始化。
这种方法有一些缺点,即具有静态数据和方法的方法。
您永远不能拥有超过一个 ProfessorDirectory
,即使您发现拥有多个会很有用。
很难测试 ProfessorDirectory
的客户端,因为它们必须使用真实代码而不是能够模拟接口。
您排除了一些有用的模式。例如,您不能编写实现 ProfessorDirectory
接口并包装该接口的任意实现的缓存代理。
总的来说这是一个糟糕的方法。
我可以像这样使用实用程序 class 吗?
public final class ProfessorDirectory {
private static Map<String, Professor> directory = new HashMap<>();
private ProfessorDirectory() {
throw new IllegalStateException("Utility Class");
}
static void addProfessorsFromDescription(String description) {
String regex = "(?<=\n).* .*(?=\n)";
Matcher m = Pattern.compile(regex).matcher(description);
while (m.find()) {
String professorName = Professor.formater(m.group(0));
directory.put(professorName, new Professor(professorName));
}
}
public static Professor get(String firstName, String lastName) {
return directory.get(Professor.formater(firstName, lastName));
}
}
我用它创建了一个库,您可以在其中检索老师的计划。
使用示例:
Planning professorPlanning = schedules.getPlanningOf(ProfessorDirectory.get("Jack", "Sticky"));
ProfessorDirectory
是内部初始化的,永远不应由用户初始化。
这种方法有一些缺点,即具有静态数据和方法的方法。
您永远不能拥有超过一个
ProfessorDirectory
,即使您发现拥有多个会很有用。很难测试
ProfessorDirectory
的客户端,因为它们必须使用真实代码而不是能够模拟接口。您排除了一些有用的模式。例如,您不能编写实现
ProfessorDirectory
接口并包装该接口的任意实现的缓存代理。
总的来说这是一个糟糕的方法。