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

[复制链接]
发表于 2025-9-4 00:59:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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


      
  • 1. 引言  
  • 2. 依赖倒置原则(DIP)  
  • 3. 接口隔离原则(ISP)  
  • 4. 迪米特法则(LoD)  
  • 5. 常见误区与反例  
  • 6. 最佳实践  
  • 7. 参考资料与延伸阅读
1. 引言

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

2.1 定义与背景

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

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

  1. // 不符合DIP的写法
  2. public class OrderService {
  3.    
  4.    
  5.     private MySQLOrderRepository repository = new MySQLOrderRepository(); // 直接依赖具体实现,违反DIP
  6.     public void createOrder(Order order) {
  7.    
  8.    
  9.         // 业务逻辑
  10.         System.out.println("创建订单: " + order.getId());
  11.         repository.save(order);
  12.     }
  13. }
  14. class MySQLOrderRepository {
  15.    
  16.    
  17.     public void save(Order order) {
  18.    
  19.    
  20.         System.out.println("[MySQL] 保存订单: " + order.getId());
  21.     }
  22. }
  23. class Order {
  24.    
  25.    
  26.     private String id;
  27.     public Order(String id) {
  28.    
  29.     this.id = id; }
  30.     public String getId() {
  31.    
  32.     return id; }
  33. }
  34. // 使用示例
  35. public class Main {
  36.    
  37.    
  38.     public static void main(String[] args) {
  39.    
  40.    
  41.         OrderService service = new OrderService();
  42.         service.createOrder(new Order("A1001"));
  43.     }
  44. }
  45. // 符合DIP的写法
  46. // 订单仓储接口,定义抽象
  47. public interface OrderRepository {
  48.    
  49.    
  50.     void save(Order order);
  51. }
  52. // MySQL实现,依赖于抽象
  53. public class MySQLOrderRepository implements OrderRepository {
  54.    
  55.    
  56.     public void
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表