Java 如何良好实践:实用程序类中的映射

时间:2021-02-13 12:04:37

标签: java dictionary utility-method

我可以使用这样的实用程序类吗?

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 个答案:

答案 0 :(得分:1)

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

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

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

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

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