核心是用接口定义行为契约,让不同类实现并面向接口编程;统一接口声明方法签名、不带状态;新增实现类无需修改原有代码;集合与参数统一用接口类型;通过工厂或容器解耦对象创建;必要时用instanceof安全转型调用子类特有功能。

核心是用接口定义行为契约,再让不同类去实现它,调用方只面向接口编程,不关心具体是谁在干活。
定义统一接口,明确“做什么”
接口只声明方法签名,不写实现、不带状态,天然适合做规范。比如通知服务,定义一个 Notifier 接口,只含 send(String content) 方法。微信、短信、邮件各自实现这个接口,彼此隔离,互不影响。
- 新增渠道(如站内信)只需加一个新类实现该接口,原有业务代码完全不动
- 接口名和方法名要表达业务意图,比如 pay()、calculateArea()、exportData()
- 避免在接口里放默认方法或静态方法,除非逻辑真正稳定且通用
集合与参数统一用接口类型
把不同实现类的对象存进 List<Notifier>,或者作为方法参数传入 void notifyAll(List<Notifier> notifiers)。遍历时直接调用 notifier.send("订单已创建"),JVM 自动路由到对应实现。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不用 if-else 判断类型,也不用 switch 分发,消除硬编码分支
- 集合声明类型必须是接口,不能是 Object 或具体实现类,否则编译报错
- 方法参数也优先用接口,而不是多个重载版本,减少维护负担
运行时绑定 + 工厂/注入解耦创建逻辑
调用方不负责 new 具体对象,而是通过工厂或 Spring 容器获取接口实例。比如配置项是 "wechat",工厂返回 WechatNotifier 实例;换成 "sms",就换另一个实现。
立即学习“Java免费学习笔记(深入)”;
- 业务类中只持有 Notifier 字段,调用 send() 即可
- 测试时可轻松替换为 MockNotifier,不依赖真实通道
- 避免在业务方法里写 new SmsNotifier(),否则扩展时还得改这里
安全使用子类特有功能
统一管理不等于放弃个性。如果某个场景必须调用微信的 getTransactionId(),需先确认类型再转型:
- 用 instanceof 检查:if (notifier instanceof WechatNotifier)
- 再强制转型:WechatNotifier wechat = (WechatNotifier) notifier;
- 之后才能调用 wechat.getTransactionId()
- 切忌跳过检查直接转型,否则运行时报 ClassCastException

















