设计模式系列(03):设计原则(二):DIP、ISP、LoD

发布于:2025-05-14 ⋅ 阅读:(16) ⋅ 点赞:(0)

本文为设计模式系列第3篇,聚焦依赖倒置、接口隔离、迪米特法则三大设计原则,系统梳理定义、实际业务场景、优缺点、最佳实践与常见误区,适合系统学习与团队协作。


目录

1. 引言

在上一文中,我们介绍了单一职责、开放封闭和里氏替换原则。本文将继续介绍另外三大设计原则:依赖倒置原则(DIP)、接口隔离原则(ISP)、迪米特法则(LoD)。这些原则是构建灵活、可扩展、易维护系统的基础。理解并应用这些原则,可以有效降低系统耦合度,提升代码质量。

2. 依赖倒置原则(DIP)

2.1 定义与背景

依赖倒置原则(Dependency Inversion Principle, DIP)要求高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。通过依赖抽象而非具体实现,可以让系统更加灵活和可扩展。

2.2 应用场景

DIP常用于分层架构中,如业务层与数据层的解耦。依赖注入和IoC容器的广泛应用,也是DIP的体现。插件式架构、可插拔模块等也都依赖于依赖倒置原则来实现灵活扩展。

2.3 代码示例

// 不符合DIP的写法
public class OrderService {
   
    private MySQLOrderRepository repository = new MySQLOrderRepository(); // 直接依赖具体实现,违反DIP
    public void createOrder(Order order) {
   
        // 业务逻辑
        System.out.println("创建订单: " + order.getId());
        repository.save(order);
    }
}
class MySQLOrderRepository {
   
    public void save(Order order) {
   
        System.out.println("[MySQL] 保存订单: " + order.getId());
    }
}
class Order {
   
    private String id;
    public Order(String id) {
    this.id = id; }
    public String getId() {
    return id; }
}
// 使用示例
public class Main {
   
    public static void main(String[] args) {
   
        OrderService service = new OrderService();
        service.createOrder(new Order("A1001"));
    }
}

// 符合DIP的写法
// 订单仓储接口,定义抽象
public interface OrderRepository {
   
    void save(Order order);
}
// MySQL实现,依赖于抽象
public class MySQLOrderRepository implements OrderRepository {
   
 

网站公告

今日签到

点亮在社区的每一天
去签到