应根据设计模式解决的是“行为契约”还是“结构复用”来选型:需解耦行为、运行时切换或跨类型调用时选接口(如策略、观察者、回调);需固化流程、共享状态或强制执行顺序时选抽象类(如模板方法、框架基类);大型系统常组合使用,先接口定义契约,再抽象类提供默认实现。

接口和抽象类在设计模式中的选择,关键看模式要解决的是“行为契约”还是“结构复用”。
适合用接口的设计模式
当模式核心是解耦行为、支持运行时切换或跨类型统一调用时,优先选接口。
-
策略模式:定义
PaymentStrategy接口,让CreditCardPayment、WeChatPay等实现类各自提供pay()逻辑。客户端只依赖接口,随时替换策略,不牵扯继承体系。 -
观察者模式:
Observer接口声明update(),多个无关类(如UI组件、日志服务)都能实现它,被同一Subject通知——这种松耦合正是接口的强项。 -
回调机制:比如异步加载完成后的
OnCompleteListener接口,任何类都可以实现,无需继承特定父类,灵活嵌入各业务模块。
适合用抽象类的设计模式
当模式需要固化流程骨架、共享状态或强制子类按固定顺序执行时,抽象类更自然。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
模板方法模式:定义
ReportGenerator抽象类,含generate()模板方法(调用loadData()→format()→export()),其中loadData()和export()为抽象方法,format()提供默认实现。子类专注实现差异步骤,复用公共流程。 -
框架基类场景:如自定义
BaseActivity抽象类,封装生命周期统一处理、网络状态监听、通用UI初始化等,所有具体Activity继承它,避免重复代码。 -
需要共享字段或构造逻辑:比如
DatabaseConnection抽象类含connectionUrl成员和带参构造器,子类(MySQLConnection、PostgreSQLConnection)直接复用连接配置,不必在每个实现里重写初始化逻辑。
混合使用的典型方式
大型系统中常组合使用:接口定义能力边界,抽象类提供基础实现。
- 先定义
Drawable接口规范draw()行为; - 再提供
AbstractShape抽象类,封装color、position字段和setColor()等通用方法; - 具体类如
Circle既extends AbstractShape又implements Drawable,兼顾结构复用与行为契约。
一句话判断原则
问自己:这个模式是否要求“多个不相关的类必须具备同一能力”?是 → 接口。是否要求“一类子类必须遵循相同结构、共享代码”?是 → 抽象类。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










