在Java中有没有更好的策略模式替代方法?

在Java中有没有更好的策略模式替代方法?,java,Java,我有两套Java API做同样的工作,但针对不同的系统平台,它们的所有API函数定义都是完全相同的,只是它们有不同的包名(并且它们没有实现相同的接口)。我没有足够的自由来更改API的代码,所以我不能让他们实现任何接口 我希望在这些API之上编写代码,并希望这些代码对两个API集都可用(类似于策略设计模式) 实现这一目标的最佳方式是什么?我不想创建接口和适配器类,因为有20多个API方法。尽管不是最初的问题想要的,但我会选择两个API的适配器。您的适配器将实现您自己的接口,并可用于策略中 这还为您

我有两套Java API做同样的工作,但针对不同的系统平台,它们的所有API函数定义都是完全相同的,只是它们有不同的包名(并且它们没有实现相同的接口)。我没有足够的自由来更改API的代码,所以我不能让他们实现任何接口

我希望在这些API之上编写代码,并希望这些代码对两个API集都可用(类似于策略设计模式)


实现这一目标的最佳方式是什么?我不想创建接口和适配器类,因为有20多个API方法。

尽管不是最初的问题想要的,但我会选择两个API的适配器。您的适配器将实现您自己的接口,并可用于策略中

这还为您提供了为所需操作提供自己的接口和描述性名称的选项,并完全抽象出底层API。也许你不需要全部20种方法

提示:

  • 在Eclipse中,“源”菜单中有一个生成委托方法的函数,一旦您有了要委托给的类型的字段,该函数就会为您创建20个委托方法
  • 要提取接口,可以使用函数Refactor/extract interface来创建和实现接口

另一种方法是使用
java.lang.reflect.Proxy
(由铍解释)。代理的实现是直接的,但是您需要提前手动创建接口

您可以使用动态代理(java.lang.reflect.InvocationHandler),但这也需要额外的类/接口。在这种情况下,动态代理只会以反射为代价将必须实现/委托的方法数量从20个减少到1个


Keppil已经评论说,在标准Java中没有“免费”的方法,因为标准Java方法是使用接口(您正在寻找Groovy的duck类型)。

在标准Java中没有任何方法可以做到这一点。也许你可以使用?我知道在制作具体的适配器类时使用“生成委托方法”是一件非常愉快的事情,有没有类似的工具可以用来生成接口?是的,在创建委托方法hanks之后使用“重构/提取接口”,这对我帮助很大,即使这不是我想要的,但它确实帮助了我完成了我的工作。我是vim用户,对这些IDE工具不太熟悉,也许我应该改变我的方式。谢谢你的选择,但我想反射会导致太多性能下降。不客气。我同意性能问题。但实际上,这正是vim用户需要的解决方案:-)