【发布时间】:2020-09-03 02:56:05
【问题描述】:
我正在使用两个第三方库来执行类似的功能。我需要能够决定在运行时使用哪个库(每个库在不同类型的任务中都表现出色,我只知道运行时特定任务需要哪个库)。
我正在尝试创建一个类,以便可以在运行时动态调用特定库的功能。最初,我考虑使用适配器模式,但问题是两个库都返回不同类型的对象,并且适配器模式只有在接口(或签名)相同时才有用。
举一个具体的例子,Selenium 框架允许我通过在 WebDriver 实例上调用方法 driver.findElement(By.Xpath("XPath")) 从页面中提取 Web 元素。同样,XSoup 框架(JSoup 的扩展)允许我通过调用Xsoup. compile( "XPath" ).evaluate(doc ).getElements(); 来执行相同的功能。这两种方法的功能在语义上是等效的 - 但是它们都返回(并期望)两种不同类型的对象(WebDriver 返回 WebElement 和 XSoup 返回 Element 的实例 - 两个不同的对象。类似地,@ 987654331@ 期望 driver 对象和 XSoup 期望 document 对象作为参数传入)。
我的目标是通过调用单个方法(例如本例中的getElement())来合并两个框架的功能,并让该方法处理调用正确库/框架的细节(基于传递的一些参数以方法为例)
什么设计模式可用于在运行时合并两个库的功能?
谢谢
【问题讨论】:
-
仅仅将逻辑封装到一个方法中还不够吗?它的签名是一个facade来访问所需的功能?访问此方法的客户端代码将不需要依赖这两个库。如果您发布了到目前为止的代码并澄清了您认为缺少的内容,那么回答问题会更容易。
标签: java oop design-patterns