信息技术大学
面向对象与设计模式
计算机基础面试八股 · 第 4 章 编程语言与工程素养
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
信息技术大学
面向对象与设计模式
计算机基础面试八股 · 第 4 章 编程语言与工程素养
封装继承多态落地
三大特性的价值在落地:封装藏变化,继承复结构,多态换实现。
封装
数据私有方法公开,改动被关在类内
继承
复用结构层次,但记住组合优于继承
多态
同一接口不同实现,运行时决定行为
落地口诀
面向接口编程,调用方不感知实现
单例与工厂模式
单例管全局唯一,工厂管创建细节:两个最常考的创建型模式。
单例
私有构造加静态实例,注意线程安全
双重检查
判空、加锁、再判空,配 volatile 防半成品
工厂
创建逻辑收口,调用方只管要不管造
适用
配置、连接池用单例;多形态产品用工厂
策略/观察者/代理模式
三个高频行为模式:策略换算法,观察者做广播,代理控访问。
策略
if-else 消灭器,算法族整体可插拔
观察者
一对多事件广播,通知与被通知解耦
代理
控制访问:延迟加载、权限校验、远程桩
SOLID 原则
五条设计底线:单一职责、开闭、里氏替换、接口隔离、依赖倒置。
SRP/OCP
一个类只因一个理由变化;扩展开放修改关闭
LSP
子类必须能无痛替换父类使用
ISP/DIP
接口细分不强迫实现;依赖抽象不依赖具体
本节要点
- ✓封装藏变化,多态换实现
- ✓单例唯一,工厂收口创建
- ✓策略换算法,观察者广播,代理控访问
- ✓SOLID 是底线不是教条
延伸主题:重构一段 if-else找找项目里的观察者
课后思考
先自己回答,再展开参考答案——能讲出来才算真懂。
1为什么说「组合优于继承」?继承什么时候才合适?
参考答案继承把父类实现细节暴露给子类,是强耦合,层次一深改父类牵动全身;组合靠委托拼装能力,边界清晰。只有稳定的 is-a 关系且父类为扩展而设计时才用继承。
2双重检查锁单例为什么必须 volatile?
参考答案new 不是原子动作:分配内存、初始化、赋引用可能被重排,另一线程可能拿到未初始化完的引用。volatile 禁止该重排,保证读到的实例是完整的。
3观察者模式与消息队列在思想上有什么共同点?
参考答案核心都是发布订阅:发布方不关心谁在听、何时处理,靠事件或消息解耦。观察者是进程内同步的轻量版,消息队列是跨进程、可异步可削峰的分布式版。