高内聚、低耦合

高内聚、低耦合

在软件设计中,高内聚低耦合是两大核心原则,它们共同构建了可维护、可扩展的代码结构。下面通过具体示例逐步解析:

一、高内聚(High Cohesion)

定义:模块内部元素(方法、属性)紧密相关,共同完成单一明确的任务。

特点

  1. 功能集中:每个类/方法只负责一个职责
  2. 减少依赖:内部修改不影响外部调用
  3. 提升可读性:代码逻辑自包含

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)

定义:模块间依赖关系最小化,通过抽象层交互。

实现方式

  1. 面向接口编程:依赖抽象而非具体实现
  2. 依赖注入:解除硬编码依赖
  3. 事件驱动:通过消息机制通信

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代码。


三、高内聚与低耦合的协同效应
  1. 维护性:修改订单验证逻辑时,只需在OrderProcessor内调整,不会波及支付模块
  2. 可测试性:可通过Mock对象单独测试PaymentService
  3. 扩展性:新增微信支付只需实现PaymentGateway接口
  4. 复用性PaymentGateway接口可被多个业务模块复用

反例对比(高耦合代码):

// 紧耦合的订单服务
public class OrderService {
    private PayPalGateway paypal = new PayPalGateway();  // 直接依赖具体实现
    
    public void processOrder(Order order) {
        // 混杂验证、计算、支付逻辑
        validateOrder(order);
        calculateTotal(order);
        paypal.processPayment(order.getTotal());  // 硬编码支付方式
    }
}

缺陷:支付方式变更需要修改多处代码,无法复用支付逻辑,单元测试困难。

最佳实践:通过Spring等框架实现依赖注入,结合设计模式(如工厂模式、观察者模式)进一步降低耦合度,同时保持模块内功能的高度内聚。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

稻香味秋天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值