在研究Neo4J源代码时,我注意到他们使用了一个非常有趣的模式来将接口与实现分离。有Node接口只能由NodeProxy类实现。然后NodeProxy委托给你认为也实现Node的NodeImpl,但它没有。 NodeImpl具有相同签名的相同方法,并且是Node的后备实现,但它不实现Node。我以前使用过代理模式但是会让NodeImpl像NodeProxy那样实现Node。关于这种模式带来的好处的任何想法?
编辑1:感谢Cirkel的评论,我现在知道它被称为Bridge pattern,主要目标是“将抽象与其实现分离,以便两者可以独立变化”,这很有趣。
答案 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不依赖于任何东西。在特定情况下,这可能是某种原因的优势或必要条件。