您的位置:首页 >Java多态实现简单工厂模式解耦思路
发布于2026-04-01 阅读(0)
扫一扫,手机访问
简单工厂将对象创建逻辑集中到工厂类中,使业务代码只依赖接口而不关心具体实现,从而实现解耦;新增支付方式只需修改工厂类,无需改动业务代码。

因为一旦在业务代码里写 new PaymentWechat() 或 new PaymentAlipay(),创建逻辑就和使用逻辑绑死了。后续加新支付方式、换实现、做 mock 测试,都得改业务代码——这不是解耦,是焊死。
简单工厂的核心动作,就是把 new 这个操作收拢到一个单独的类(比如 PaymentFactory)里,用多态向上转型,让调用方只依赖 Payment 接口,不关心背后是谁。
Payment create(String type)PaymentWechat、PaymentAlipay)都要实现该接口if-else 或 switch 判断类型,但外部完全看不到这些分支严格来说,标准简单工厂做不到“完全不改”——它的 create() 方法里必然有判断逻辑。但可以控制修改范围:只动工厂类,不动业务类、不改接口、不碰已有实现类。
常见错误是把类型字符串硬编码在业务侧:factory.create("wechat"),结果哪天拼错成 "weichat",运行时报 NullPointerException 都不知道哪来的。更稳妥的是用枚举限定合法类型。
enum PaymentType { WECHAT, ALIPAY, UNIONPAY }Payment create(PaymentType type),避免字符串误传switch 中加一个 case + 写新实现类Class.forName().newInstance()——反射绕过编译检查,出错晚、难调试不是为了炫技,而是让“调用方不感知实现变化”。业务代码拿到的是 Payment 类型的引用,调用 pay() 时,JVM 根据实际对象类型自动分派到对应实现——这个动态绑定过程,就是多态在扛事。
如果工厂返回的是具体类型(比如 PaymentWechat),那业务代码变量声明也得跟着变,一加新支付方式就得批量改声明、改调用,彻底失去弹性。
void pay(BigDecimal amount)Payment,业务代码只调 payment.pay(...),连 instanceof 都不该出现它们长得像,但目的不同:简单工厂专注“怎么造出来”,策略模式专注“造出来后怎么用”。你可能在一个项目里同时用两者——工厂负责生成策略实例,策略接口本身由多态驱动。
典型踩坑是把工厂类写成策略上下文:比如在 PaymentContext 里既缓存实例又做类型路由。这会让职责混乱,一旦要支持同一类型多个配置(如两个不同的微信商户号),就卡住。
PaymentExecutor)负责持有、执行、切换策略,不参与创建多态是基础,但别指望靠它掩盖设计失衡。工厂类开始出现“创建前校验参数”“创建后设置回调”“缓存单例实例”这些逻辑时,就该停下来想想:它是不是已经不只是“简单”工厂了。
上一篇:米读极速版任务攻略与完成技巧
下一篇:微信读书更换朗读声音方法详解
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9