服务定位器模式 - 如何处理同一个服务接口的多个实现

Posted

技术标签:

【中文标题】服务定位器模式 - 如何处理同一个服务接口的多个实现【英文标题】:Service Locator Pattern - How to deal with more than one implementation of the same service interface 【发布时间】:2013-12-26 14:39:26 【问题描述】:

我对服务定位器设计模式有点困惑。

关于这种模式,这似乎是一个非常非常基本的问题,但我想不通:如果我有多个类实现某个 IServiceX 接口怎么办?定位器如何解析我正在寻找的实例?

例如,我可以注册:

ServiceA 实现 IServiceX ServiceB 实现 IServiceX

这似乎完全有可能,但我不确定。假设我有两种消息服务(相同的服务接口),我想在运行时使用这两种实现。定位器将如何在这些不同的实现之间进行选择?

【问题讨论】:

【参考方案1】:

这是有趣的部分。 完全由您决定。

您可以遍历调用堆栈并找出调用的来源,然后根据调用者返回不同的实现。

您可能有一个始终适用于特定实现的工厂方法。

您可以根据一天中的时间、一周中的某天、可用的内存量来返回实例...

一切由你决定!

【讨论】:

很高兴知道这一点!尽管我见过的最常见的用法是 1:1 实现(在示例和教程中)。

以上是关于服务定位器模式 - 如何处理同一个服务接口的多个实现的主要内容,如果未能解决你的问题,请参考以下文章

django 如何处理多个 memcached 服务器?

接口如何处理重复请求?

如果可能有多个服务器(并且每个服务器都可以有多个线程),如何处理竞争条件

Flux:如何处理多个异步请求

WebSocket 服务器如何处理多个传入的连接请求?

如何处理位置服务弹出警报上的“取消”按钮