作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。
耦合是衡量模块间相互依赖关系紧密程度的一个指标,在软件工程中,通常希望模块之间的耦合度越低越好,以提高代码的可维护性和可重用性。下面我将用表格的形式,对您提到的耦合分类进行讲解,并为每种耦合提供一小段示例代码(使用Java语言或伪代码)以帮助理解。
耦合类型 | 描述 | 示例代码 |
---|---|---|
无直接耦合 | 模块之间没有直接的关系。 | // 模块A和模块B之间没有直接联系,彼此独立工作。 |
数据耦合 | 模块之间通过参数传递基本数据类型进行通信。 | // 模块A调用模块B,通过参数传递数据。public class A { public void methodA() { B.methodB(1); }}public class B { public static void methodB(int data) { // 使用数据 }} |
标记耦合(Stamp Coupling) | 模块之间通过复合数据类型(如结构体、类)进行通信,但不使用全部数据。 | // 模块A调用模块B,传递对象,但B只用对象的一部分。public class Data { int part1; int part2;}public class A { public void methodA() { Data data = new Data(); B.methodB(data); }}public class B { public static void methodB(Data data) { // 只使用data的part1 }} |
控制耦合 | 一个模块控制另一个模块的逻辑流程,通常通过传递控制参数实现。 | // 模块A调用模块B,并通过参数控制B的逻辑流程。public class A { public void methodA() { B.methodB(true); }}public class B { public static void methodB(boolean flag) { if (flag) { // 逻辑1 } else { // 逻辑2 } }} |
外部耦合 | 模块之间共享一个外部的环境(如全局变量、文件系统)。 | // 两个模块共享同一个全局变量。public class Global { public static int sharedData;}public class A { public void methodA() { Global.sharedData = 1; }}public class B { public void methodB() { int data = Global.sharedData; }} |
公共耦合 | 两个或多个模块共享同一个全局数据结构。 | // 模块A和模块B都使用同一个全局数据结构。public class SharedData { public static int data;}public class A { public void methodA() { SharedData.data = 1; }}public class B { public void methodB() { int useData = SharedData.data; }} |
内容耦合 | 一个模块直接使用另一个模块的内部数据或逻辑结构。 | // 模块A直接访问和修改模块B的内部数据。public class A { public void methodA() { B.internalData = 1; // 直接修改B的内部数据 }}public class B { public static int internalData;} |
答案及解析:
。 2. B. 数据耦合。这是数据耦合的典型例子,通过基本数据类型进行模块间通信。 3. A. 外部耦合。共享全局变量属于外部耦合的范畴。 4. B. 标记耦合。因为虽然通过对象传递数据,但只使用了对象的一部分。 5. D. 内容耦合。内容耦合是耦合度最高的形式,因为一个模块直接依赖另一个模块的内部结构或数据。 6. D. 内容耦合。直接访问或修改另一个模块的内部数据是内容耦合的特征。