有趣的API模式

时间:2011-06-11 18:52:40

标签: java api design-patterns

在研究Neo4J源代码时,我注意到他们使用了一个非常有趣的模式来将接口与实现分离。有Node接口只能由NodeProxy类实现。然后NodeProxy委托给你认为也实现Node的NodeImpl,但它没有。 NodeImpl具有相同签名的相同方法,并且是Node的后备实现,但它不实现Node。我以前使用过代理模式但是会让NodeImpl像NodeProxy那样实现Node。关于这种模式带来的好处的任何想法?

编辑1:感谢Cirkel的评论,我现在知道它被称为Bridge pattern,主要目标是“将抽象与其实现分离,以便两者可以独立变化”,这很有趣。

3 个答案:

答案 0 :(得分:2)

如果你更详细地看一下NodeImpl,你会发现那些与Node方法相对应的方法有不同的签名 - 它们还会带有NodeManager个参数。

仅这一点使他们无法实现Node接口。

NodeProxy然后维护对NodeManager的引用,然后NodeManager可以传递给NodeImpl对象。

答案 1 :(得分:1)

它的网络是强制您通过NodeProxy而不是直接使用NodeImpl。我对Neo4J不太熟悉,说明为什么在这种情况下做这件事会有利。也许NodeProxy配备了NodeImpl没有的其他行为。

答案 2 :(得分:0)

此实现的主要作用是还原依赖项。如果让NodeImpl实现Node,那么NodeImpl将依赖于Node。通过引入NodeProxy,您可以让NodePoxy依赖NodeImpl而NodeImpl不依赖于任何东西。在特定情况下,这可能是某种原因的优势或必要条件。