抽象类是设计模式中支撑骨架的关键结构,适用于统一模板、部分共性实现与强制子类定制的场景;典型应用包括模板方法模式(固定流程+可变环节)、适配器模式(简化接口实现)、抽象工厂(封装通用逻辑)、以及多模式组合时的粘合剂。

抽象类在设计模式中不是“可选配件”,而是支撑骨架的关键结构。它适合用在需要统一模板+部分共性实现+强制子类定制的场景,而不是单纯为了“看起来高级”而加。
模板方法模式:抽象类最典型的用武之地
当一个流程的步骤固定,但某些环节因具体业务而异时,抽象类就是天然容器。
- 把不变的流程(如“准备→执行→收尾”)写成具体方法,在抽象类中按顺序调用
- 把变化的环节(如“怎么准备”“怎么执行”)声明为抽象方法,留给子类实现
- 子类继承后,只需专注自己那几块逻辑,流程控制权仍在父类手中
例如导出报表:所有子类都走“连接数据库→查数据→格式化→写文件→关闭连接”,其中只有“查数据”和“格式化”因报表类型不同而不同——这两个就做成抽象方法。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
适配器模式中简化接口实现
当接口定义了很多方法,但多数子类只关心其中一两个时,直接实现接口会写一堆空方法,难看又易错。
- 抽象类作为“中间层”,实现接口全部方法(空实现或默认逻辑)
- 具体子类只重写自己真正需要的方法即可
- Java AWT 中的 WindowAdapter 就是典型例子:它实现了 WindowListener 接口全部7个方法,子类继承它后,只重写 windowClosing 就能响应关闭事件
工厂类体系中的抽象基类
在抽象工厂或简单工厂中,抽象类可用于封装通用创建逻辑与校验规则。
- 比如所有数据库连接工厂都要做“URL校验”“超时设置”“日志记录”,这些写在抽象工厂类里
- 而“如何建立MySQL连接”“如何建立PostgreSQL连接”则作为抽象方法由子类实现
- 既避免重复代码,又保证子类不绕过关键流程
组合多个设计模式时的粘合剂
实际项目很少只用一种模式。抽象类常作为桥梁,把不同模式串起来。
- 比如策略模式中,每个策略本该是接口实现类;但如果多个策略共享初始化逻辑、缓存机制或失败回退行为,就可以提取一个抽象策略类
- 再比如观察者模式中,“添加/移除监听器”逻辑固定,但“通知时做什么”因监听器类型而异——前者放抽象类,后者设为抽象方法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










