高内聚、低耦合
在软件设计中,高内聚和低耦合是两大核心原则,它们共同构建了可维护、可扩展的代码结构。下面通过具体示例逐步解析:
一、高内聚(High Cohesion)
定义:模块内部元素(方法、属性)紧密相关,共同完成单一明确的任务。
特点:
- 功能集中:每个类/方法只负责一个职责
- 减少依赖:内部修改不影响外部调用
- 提升可读性:代码逻辑自包含
Java实现示例:
// 高内聚的订单处理类
public class OrderProcessor {
// 仅处理订单相关操作
public void validateOrder(Order order) {
// 验证逻辑
}
public void calculateTotal(Order order) {
// 计算订单总额
double total = order.getItems().stream()
.mapToDouble(item -> item.getPrice() * item.getQuantity())
.sum();
order.setTotal(total);
}
public void applyDiscount(Order order, Discount discount) {
// 应用折扣逻辑
order.setTotal(order.getTotal() * (1 - discount.getRate()));
}
}
优势:修改折扣计算方式时,只需调整applyDiscount方法,不影响其他模块。
二、低耦合(Low Coupling)
定义:模块间依赖关系最小化,通过抽象层交互。
实现方式:
- 面向接口编程:依赖抽象而非具体实现
- 依赖注入:解除硬编码依赖
- 事件驱动:通过消息机制通信
Java实现示例:
// 1. 定义抽象接口
public interface PaymentGateway {
void processPayment(double amount);
}
// 2. 实现具体支付方式(低耦合)
public class PayPalGateway implements PaymentGateway {
@Override
public void processPayment(double amount) {
System.out.println("Processing $" + amount + " via PayPal");
}
}
public class StripeGateway implements PaymentGateway {
@Override
public void processPayment(double amount) {
System.out.println("Processing $" + amount + " via Stripe");
}
}
// 3. 业务类通过接口交互
public class PaymentService {
private final PaymentGateway gateway; // 依赖抽象
public PaymentService(PaymentGateway gateway) { // 依赖注入
this.gateway = gateway;
}
public void executePayment(Order order) {
gateway.processPayment(order.getTotal());
}
}
优势:更换支付方式时,只需注入不同的PaymentGateway实现,无需修改PaymentService代码。
三、高内聚与低耦合的协同效应
- 维护性:修改订单验证逻辑时,只需在
OrderProcessor内调整,不会波及支付模块 - 可测试性:可通过Mock对象单独测试
PaymentService - 扩展性:新增微信支付只需实现
PaymentGateway接口 - 复用性:
PaymentGateway接口可被多个业务模块复用
反例对比(高耦合代码):
// 紧耦合的订单服务
public class OrderService {
private PayPalGateway paypal = new PayPalGateway(); // 直接依赖具体实现
public void processOrder(Order order) {
// 混杂验证、计算、支付逻辑
validateOrder(order);
calculateTotal(order);
paypal.processPayment(order.getTotal()); // 硬编码支付方式
}
}
缺陷:支付方式变更需要修改多处代码,无法复用支付逻辑,单元测试困难。
最佳实践:通过Spring等框架实现依赖注入,结合设计模式(如工厂模式、观察者模式)进一步降低耦合度,同时保持模块内功能的高度内聚。
1504

被折叠的 条评论
为什么被折叠?



