内聚性
功能内聚(最强)
理由:所有方法都服务于一个单一的、明确的功能。
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("连接数据库"); }
}
👉 就像一个“杂物箱”,什么都有但毫无内在联系。