对面向对象编程原则和设计模式有扎实的理解
招聘要求中提到的**“对面向对象编程原则和设计模式有扎实的理解”,指的是能够编写出高内聚、低耦合、易扩展、易维护**的代码,而不是简单地把代码堆砌在几个类里。
这主要包含 面向对象三大特性、SOLID 五大设计原则 以及 常用设计模式 3 个层面的具体能力。
1. 面向对象三大特性(基础)
- 封装 (Encapsulation): 隐藏内部实现细节,仅暴露必要的接口(利用
private/public/protected保护数据)。 - 继承 (Inheritance): 提取代码复用,建立 “is-a” 的层级关系(警惕过度继承,优先考虑组合)。
- 多态 (Polymorphism): 基于抽象(接口或抽象类)编写代码,运行时动态绑定具体实现。
2. SOLID 设计原则(核心)
| 原则 | 名称 | 核心思想 | 反面教材 vs 正确做法 |
|---|---|---|---|
| S | 单一职责原则 (SRP) | 一个类应该只有一个发生变化的原因。 | 反面:一个 UserService 既处理业务逻辑,又直接拼 SQL 发送邮件。正确:拆分为 UserService、UserRepository、EmailService。 |
| O | 开闭原则 (OCP) | 对扩展开放,对修改关闭。 | 扩展新功能时,尽量通过添加新类来实现,而不是修改原有代码。 |
| L | 里氏替换原则 (LSP) | 子类必须能够替换掉它们的父类(或接口)。 | 不要在子类重写方法时直接 throw new NotImplementedException()。 |
| I | 接口隔离原则 (ISP) | 客户端不应该依赖它不需要的接口。 | 避免定义庞大的“万能接口”,将其拆分为多个职责明确的小接口。 |
| D | 依赖倒置原则 (DIP) | 高层模块不应该依赖低层模块,二者都应该依赖于抽象。 | 依赖于 INotificationService 接口,而不是具体的 SmsService 类(配合依赖注入 DI)。 |
3. 常用设计模式(实践应用)
面试和日常开发中最常考查的三类模式:
- 创建型 (Creational): 单例模式 (Singleton)、工厂模式 (Factory)、建造者模式 (Builder)。解决“如何优雅地创建对象”。
- 结构型 (Structural): 适配器模式 (Adapter)、装饰器模式 (Decorator)、代理模式 (Proxy)。解决“如何组合类与对象”。
- 行为型 (Behavioral): 观察者模式 (Observer)、策略模式 (Strategy)、模板方法 (Template Method)。解决“对象间如何协作与分工”。
4. 代码重构示例:违反原则 vs 符合原则
假设要开发一个支付处理系统,支持微信支付和支付宝。
❌ 坏代码(违反 OCP 和 DIP,耦合度极高)
| |
✅ 好代码(结合 策略模式 + SOLID 原则)
| |