内聚性

功能内聚(最强)

理由:所有方法都服务于一个单一的、明确的功能。

class Calculator {
    int add(int a, int b) { return a + b; }
    int subtract(int a, int b) { return a - b; }
    int multiply(int a, int b) { return a * b; }
    int divide(int a, int b) { return a / b; }
}

👉 就像“专职计算器”,所有方法都指向“计算”这个目标。


顺序内聚

理由:前一个方法的输出是后一个方法的输入,形成流水线。

class Pipeline {
    String readData() { return "raw"; }
    String processData(String data) { return data.toUpperCase(); }
    void saveData(String data) { System.out.println("顺序内聚: " + data); }
}

👉 像工厂流水线:一环套一环,数据接力棒传下去。


通信内聚

理由:方法通过共享同一个数据结构进行关联。

class Student {
    String name;
    int age;
}
class StudentService {
    Student student = new Student();
    void setName(String name) { student.name = name; }
    void setAge(int age) { student.age = age; }
}

👉 所有方法围绕同一个对象 student 打转。


过程内聚

理由:方法按一定顺序组成一个过程,但没有严格的数据传递关系。

class FileProcessor {
    void openFile() { System.out.println("打开文件"); }
    void readFile() { System.out.println("读取文件"); }
    void closeFile() { System.out.println("关闭文件"); }
}

👉 就像“开门 → 干活 → 关门”,过程相关,但数据不是必然依赖。


时间内聚

理由:方法被放在一起只是因为需要在同一时间执行。

class Initializer {
    void initDatabase() { System.out.println("初始化数据库"); }
    void initCache() { System.out.println("初始化缓存"); }
    void initLogger() { System.out.println("初始化日志系统"); }
}

👉 开机时大家一起跑,但方法之间没有紧密联系。


逻辑内聚

理由:方法逻辑相关,但要通过条件分支决定执行哪一部分。

class ErrorHandler {
    void handleError(int errorCode) {
        if (errorCode == 404) handleNotFound();
        else if (errorCode == 500) handleServerError();
    }
    void handleNotFound() { System.out.println("处理 404 错误"); }
    void handleServerError() { System.out.println("处理 500 错误"); }
}

👉 “都是处理错误”,但具体干啥要看 if/else


偶然内聚(最弱)

理由:方法之间完全没有关系,只是碰巧放在一起。

class Utils {
    void printHello() { System.out.println("Hello!"); }
    int add(int a, int b) { return a + b; }
    void connectDatabase() { System.out.println("连接数据库"); }
}

👉 就像一个“杂物箱”,什么都有但毫无内在联系。