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 是内部初始化的,永远不应由用户初始化。

这种方法有一些缺点,即具有静态数据和方法的方法。

  1. 您永远不能拥有超过一个 ProfessorDirectory,即使您发现拥有多个会很有用。

  2. 很难测试 ProfessorDirectory 的客户端,因为它们必须使用真实代码而不是能够模拟接口。

  3. 您排除了一些有用的模式。例如,您不能编写实现 ProfessorDirectory 接口并包装该接口的任意实现的缓存代理。

总的来说这是一个糟糕的方法。