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

时间:2013-05-26 10:26:12

标签: java

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

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

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

2 个答案:

答案 0 :(得分:5)

尽管不是原始问题想要的,但我会选择两个API的适配器。您的适配器将实现您自己的界面,然后可以在策略中使用。

这也使您可以选择为自己需要的操作提供自己的界面和描述性名称,并完全抽象出底层API。也许你不需要所有20种方法?

提示:

  • 在Eclipse中,源菜单中有一个函数来生成委托方法,只要你有一个你想要委托的类型的字段,就会为你创建20个委托方法。 / LI>
  • 要提取界面,您可以使用Refactor / extract interface 功能创建并实现界面。

另一种方法是使用java.lang.reflect.Proxy(如Beryllium所述)。代理的实现很简单,但您需要手动创建接口。

答案 1 :(得分:2)

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

Keppil已经评论说,没有办法在标准Java中“免费”获得这个,因为标准的Java方法是使用一个接口(你正在寻找Groovy的鸭子打字)。