耦合性:费书记控制外部公共内容
耦合度的层次
特别注意: 控制参数≠数据
🧩 耦合度从低到高 — Java 小例子讲透
🏝️ 非直接耦合(No Coupling)
模块之间互不依赖,互不认识,和平共处。
class Logger {
void log(String msg) {
System.out.println(msg);
}
}
class Calculator {
int add(int a, int b) {
return a + b;
}
}
// main 只是分别调用
public class Demo {
public static void main(String[] args) {
Logger logger = new Logger();
Calculator calc = new Calculator();
logger.log("结果: " + calc.add(2, 3));
}
}
🔹 耦合最低,互相毫无关系,靠 main 串联。
📦 数据耦合(Data Coupling)
模块只传递必要的参数,互不窥探对方内部。
class Calculator {
int add(int a, int b) {
return a + b;
}
}
class Printer {
void printResult(int result) {
System.out.println("结果: " + result);
}
}
🔹 推荐,模块间只传递简单数据,独立性强。
📑 标记耦合(Stamp Coupling / 数据结构耦合)
模块传递包含多字段的对象,但对方只用其中一部分。
class Data {
int x;
int y;
}
class Calculator {
int add(Data d) {
return d.x + d.y;
}
}
🔹 结构一改,全体模块要跟着改,有潜在连锁反应。
🎛️ 控制耦合(Control Coupling)
模块传递控制参数告诉对方“怎么做”。
class Processor {
void process(int a, int b, boolean doAdd) {
if (doAdd) System.out.println(a + b);
else System.out.println(a - b);
}
}
🔹 传递的是行为指令,模块内部逻辑被外部控制,耦合升高。
🌐 外部耦合(External Coupling)
模块依赖外部资源(文件、设备、通信协议、数据库、网络等)。
import java.nio.file.*;
class FileReader {
String read(String path) throws Exception {
return Files.readString(Path.of(path));
}
}
🔹 外部变化就会影响模块,环境依赖重。
⚠️ 公共耦合(Common Coupling)
模块通过共享全局变量/公共数据区交流。
class Global {
static int counter = 0;
}
class ModuleA {
void run() {
Global.counter++;
}
}
class ModuleB {
void run() {
System.out.println(Global.counter);
}
}
🔹 谁都能改,谁都能读,调试地狱模式。
💣 内容耦合(Content Coupling)
模块直接操作另一个模块的内部实现(最危险)。
class Secret {
int hidden = 42;
}
class Hacker {
void hack(Secret s) {
s.hidden = 99; // 直接改内部
}
}
🔹 最强耦合,破坏封装性,牵一发而动全身。