java有趣的API模式
在研究Neo4J源代码时,我注意到它们使用了一种非常有趣的模式来将接口与实现分离。有一个Node接口,它仅由NodeProxy类实现。NodeProxy反过来委托给NodeImpl,您可能认为它也实现了Node,但它没有。NodeImpl具有具有相同签名的相同方法,并且是Node的支持实现,但它没有实现Node。我以前使用过代理模式,但会让NodeImpl像NodeProxy一样实现Node。关于这种模式带来的好处有什么想法吗
编辑1:多亏了Cirkel的评论,我现在知道它被称为Bridge pattern,主要目标是“将抽象与其实现解耦,以便两者可以独立变化”,这很有趣
# 1 楼答案
如果你更详细地看一下
NodeImpl
,你会发现那里与Node
方法相对应的方法有不同的签名——它们还带有一个NodeManager
参数这就使得他们不可能实现节点接口
然后,NodeProxy维护对NodeManager的引用,然后可以将其传递给NodeImpl对象
# 2 楼答案
它的网络是,它迫使你通过NodeProxy,而不是直接与NodeImpl合作。我对Neo4J还不太熟悉,无法解释为什么在这种情况下这样做是有利的。也许NodeProxy中包含了NodeImpl没有的其他行为
# 3 楼答案
这种实现的主要效果是恢复依赖关系。如果让NodeImpl实现Node,那么NodeImpl将依赖于Node。通过引入NodeProxy,可以让NodeProxy依赖于NodeImpl,而NodeImpl不依赖任何东西。在特定情况下,出于某种原因,这可能是一种优势或必要