加载中...

服务定位器模式(Service Locator)提供一个中心化的注册表,组件在运行时向它按名称或类型查询所需的服务实例,而不是自己创建依赖。
服务先注册到定位器,使用方调用类似 ServiceLocator.get("userService") 的接口获取;定位器内部可结合缓存、懒加载与配置切换实现。
两者都为了解耦组件与依赖的创建。依赖注入由容器把依赖"推"给组件,依赖关系显式出现在构造函数或属性上;服务定位器则由组件主动"拉"取,依赖被隐藏在方法体内。Martin Fowler 曾撰文比较二者,当代主流框架普遍倾向依赖注入。
优点是实现简单、可动态替换服务;缺点是依赖不可见导致难以静态分析与测试,所有组件都耦合到定位器本身,常被视为需谨慎使用甚至是反模式。

登录 后参与讨论
暂无讨论,来发表第一条评论吧