Java面向对象设计六大核心原则是SRP、OCP、LSP、DIP、ISP、LOD,分别解决职责单一、扩展开放、继承安全、依赖抽象、接口精简和耦合降低问题,本质是系统性解耦的思维规则。

Java面向对象设计不是堆砌类和方法,而是用一套可验证的思维规则组织代码。真正落地的关键,在于把设计原则自然地融入日常编码,而不是先套概念再写逻辑。
六大核心原则要抓准重点
所谓“六大原则”(SRP、OCP、LSP、DIP、ISP、LOD),本质是解决不同维度的耦合问题:
- 单一职责(SRP):一个类只做一件事。比如订单类只管订单数据,不要同时处理支付、发短信、更新库存——这些应拆成独立服务类。
- 开闭原则(OCP):新增功能靠加代码,不改老代码。例如添加新的支付方式(支付宝、微信),只需新增实现类,不碰原有支付调度逻辑。
- 依赖倒置(DIP):模块之间依赖接口,不依赖具体类。比如日志模块不直接调用Log4jLogger,而是依赖Logger接口,运行时注入具体实现。
- 里氏替换(LSP):子类能无缝替代父类。若重写父类方法后行为异常(如抛出父类没声明的异常),就违反了该原则。
- 接口隔离(ISP):避免定义“胖接口”。比如用户服务接口不应包含上传文件、发送邮件、生成报表等全部方法,而应按场景拆为UserQueryService、UserNotifyService等小接口。
- 迪米特法则(LOD):只跟“熟人”打交道。类A调用类B的方法,B返回的对象C,A不应直接调用C的方法——应由B来协调或封装。
三类设计模式对应三类问题
模式不是炫技工具,而是针对常见协作场景的标准化解法:
- 创建型模式:解决“谁来造对象、怎么造”的问题。简单工厂适合业务初期快速统一创建;工厂方法适合多产品线扩展;建造者适用于参数多、构造逻辑复杂的对象(如HTTP请求构建器)。
- 结构型模式:解决“怎么组合已有类/对象”的问题。装饰器用于动态加功能(如给输入流加缓冲、加密);适配器用于对接旧系统或第三方SDK(如把老版支付接口包装成新接口);代理用于控制访问(如RPC远程调用代理、事务拦截代理)。
- 行为型模式:解决“对象之间怎么协作、职责怎么分”的问题。策略模式用于算法切换(如不同优惠计算规则);观察者用于事件通知(如订单状态变更后触发短信、积分、物流更新);模板方法用于固定流程+可变步骤(如统一的数据导出流程:查数据→格式化→写文件→发邮件)。
从写代码开始实践原则与模式
不必等架构设计阶段才考虑这些。日常开发中就能逐步落地:
立即学习“Java免费学习笔记(深入)”;
- 写一个新Service类时,先问:它只负责一个明确职责吗?是否已存在相似逻辑可以复用或抽取?
- 加新if-else分支前,先想:能不能用策略+Map注册的方式替换?这样下次加规则不用改原方法。
- 调用外部API或工具类时,别直接new或静态调用,而是定义接口,通过Spring @Autowired注入——这是最基础的依赖倒置。
- 两个类之间频繁传参、互相调用方法,检查是否违反迪米特法则。尝试引入中间协调类,或让一方承担更多封装责任。
架构模式是原则在系统层面的延伸
单体应用里,原则和模式作用于类与模块;微服务或分层架构中,它们上升为系统级约束:
- 分层架构(Controller → Service → Repository)本质是职责分离(SRP)+依赖倒置(DIP):上层依赖下层抽象,不依赖具体实现。
- 领域驱动设计(DDD)把业务概念映射为实体、值对象、聚合根,是对“现实建模”思想的强化,天然契合面向对象本意。
- 六边形架构(Hexagonal Architecture)强调核心业务逻辑不依赖框架、数据库或UI,所有外部依赖都通过端口(Port)和适配器(Adapter)接入——这是DIP和ISP在架构层的极致体现。


















