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

设计模式系列(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.xdnf.cn/news/5803.html

相关文章:

  • SpringBoot与Eventuate Tram整合 - 实现转账最终一致性系统
  • 解锁生命周期评价密码:OpenLCA、GREET 与 R 语言的融合应用
  • 基于 Amazon Bedrock 和 Amazon Connect 打造智能客服自助服务 – 设计篇
  • 【阿里云】阿里云 Ubuntu 服务器无法更新 systemd(Operation not permitted)的解决方法
  • Java Solon v3.3.0 发布(国产优秀应用开发基座)
  • Spring Boot Swagger 安全防护全解析:从旧版实践到官方规范
  • Spring Boot 跨域问题全解:原理、解决方案与最佳实践
  • Tomcat和Nginx的主要区别
  • 【MySQL】第三弹——表的CRUD进阶(一)数据库约束
  • 地址簿模块-01.需求分析
  • D-Pointer(Pimpl)设计模式(指向实现的指针)
  • 在VSCode中接入DeepSeek的指南
  • 【时时三省】(C语言基础)使用字符串处理函数
  • 基于Spring Boot+Layui构建企业级电子招投标系统实战指南
  • 人脸识别系统中的隐私与数据权利保障
  • ‌OPE.AI开放平台:一站式企业AI应用引擎
  • 前端学习(2)—— CSS详解与使用
  • centos7.x下,使用宝塔进行主从复制的原理和实践
  • 博客系统技术需求文档(基于 Flask)
  • R语言绘图 | 渐变火山图
  • Leetcode 3548. Equal Sum Grid Partition II
  • Andorid之TabLayout+ViewPager
  • 通过POI实现对word基于书签的内容替换、删除、插入
  • 网络协议与系统架构分析实战:工具与方法全解
  • 【应用密码学】实验五 公钥密码2——ECC
  • 深入 MySQL 查询优化器:Optimizer Trace 分析
  • 初入OpenCV
  • 【Qt】qss语法详解
  • [250512] Node.js 24 发布:ClangCL 构建,升级 V8 引擎、集成 npm 11
  • MapReduce 模型