2011-06-11 67 views
5

在研究Neo4J源代碼時,我注意到它們使用了一個非常有趣的模式來將接口從實現中解耦出來。有一個Node接口只能由NodeProxy類實現。 NodeProxy又代表NodeImpl,你會認爲它也實現了Node,但它不會。 NodeImpl具有相同的簽名方法並且是Node的後續實現,但它不實現Node。我以前使用過代理模式,但是會讓NodeImpl像NodeProxy那樣實現Node。有關這種模式帶來的優點的任何想法?有趣的API模式

編輯1:感謝Cirkel的評論我現在知道這叫做Bridge pattern,主要目標是「將抽象從其實現中分離出來,以便兩者可以獨立變化」,這很有趣。

+0

'NodeProxy'如何委託給'NodeImpl'? 'NodeProxy'不以任何方式使用'NodeImpl'。這是另一種方式 - 'NodeImpl'使用'NodeProxy'。 – 2011-06-11 18:57:05

+0

不知道有什麼好處,因爲我對你正在查看的框架一無所知,但聽起來像NodeProxy很像一種服務定位器。 – 2011-06-11 19:03:47

+1

它被稱爲_Bridge pattern_ – 2011-06-13 02:11:06

回答

1

它的網絡是它強制你通過NodeProxy而不是直接使用NodeImpl。我對Neo4J不夠熟悉,無法說明爲什麼在這種情況下做它有利。也許NodeProxy配備了NodeImpl沒有的附加行爲。

0

該實現的主要作用是將依賴關係恢復。如果你讓NodeImpl實現Node,那麼NodeImpl將依賴於Node。通過引入NodeProxy,您可以讓NodePoxy依賴於NodeImpl,而NodeImpl不依賴於任何內容。這在某些特定情況下可能是某種原因的優點或缺陷。

+0

當然,NodeProxy也依賴於Node,所以我們現在有一個依賴於NodeImpl和Node的節點和一個依賴Node的對象 - 很難看到它的優點,但是可能它們必須解決一些問題奇怪的限制/必要條件我們不知道 – Voo 2011-06-11 20:44:39

2

如果你仔細看看NodeImpl,你會發現對應於Node方法的方法有不同的簽名 - 它們另外還有NodeManager參數。

僅憑這一點,就無法實現Node接口。

NodeProxy然後維護對NodeManager的引用,然後它可以傳遞給NodeImpl對象。