当前位置: 首页 > news >正文

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

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


目录

  • 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 代码示例

// 不符合DIP的写法
public class OrderService {private MySQLOrderRepository repository = new MySQLOrderRepository(); // 直接依赖具体实现,违反DIPpublic 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 {
http://www.dtcms.com/a/187701.html

相关文章:

  • 记录算法笔记(2025.5.13)二叉树的最大深度
  • 【Qt】pro工程文件转CMakeLists文件
  • .NET8关于ORM的一次思考
  • MapReduce 入门实战:WordCount 程序
  • 2025.05.11阿里云机考真题算法岗-第三题
  • MapReduce打包运行
  • JavaEE--初识网络
  • OCR:开启财务数字化变革的魔法钥匙
  • 提示词设计模板(基于最佳实践)
  • springboot3+vue3融合项目实战-大事件文章管理系统-获取文章分类详情
  • BFS算法篇——从晨曦到星辰,BFS算法在多源最短路径问题中的诗意航行(上)
  • 【Android】下拉刷新组件Swiperefreshlayout
  • 力扣算法---总结篇
  • 分式注记种表达方式arcgis
  • Qubes os系统详解
  • Leetcode 3542. Minimum Operations to Convert All Elements to Zero
  • Android之横向滑动列表
  • 每日算法刷题计划Day5 5.13:leetcode数组3道题,用时1h
  • mac 10.15.7 svn安装
  • 《内网渗透测试:绕过最新防火墙策略》
  • C#高级编程:设计模式原则
  • 数据分析预备篇---Pandas的Series
  • langChain存储文档片段,并进行相似性检索
  • 【神经网络与深度学习】通俗易懂的介绍非凸优化问题、梯度消失、梯度爆炸、模型的收敛、模型的发散
  • GITLAB跑gradle项目 不借助maven-publish直接上传到nexus私人仓库
  • C++STL——map和set的使用
  • 使用DevEco Studio性能分析工具高效解决鸿蒙原生应用内存问题
  • 免费专业级 PDF 处理!SolidPDF OCR 识别 + 精准转换批量处理
  • 【源码+文档+调试讲解】驾校报名小程序2
  • 嵌入式开发学习日志(数据结构--顺序结构单链表)Day19