2010-05-11 51 views
3
class Foo 
{ 
    Bar b; 
    List<Foo> Neighbours; 
} 

class Bar 
{ 
    Spam s; 
    List<Bar> Neighbours; 
} 

class Spam 
{ 
    List<string> Neighbours; 
} 

這些類別中的每一個都有AddNeighbour,RemoveNeighbour方法。如何同步三個課程?

用戶可以隨意添加/刪除任何類的鄰居。

我想要這三個對象在同步

我該怎麼做?

+0

你可以給你更多的信息,你想達到什麼? – UpTheCreek 2010-05-11 07:33:01

+0

@UpTheCreek我需要同步三張圖。它們具有與上面所示類似的基本結構。 – 2010-05-11 07:37:05

+0

如果向「垃圾郵件」添加「字符串」鄰居,您期望什麼行爲?那麼'Foo'和'Bar'對象看起來像那樣必須被創建呢? – 2010-05-11 07:44:37

回答

4

選擇一個 - 有富通話欄時,它的更新和酒吧叫垃圾郵件。這將導致緊密耦合的對象,並且您可能還需要將垃圾郵件調用回Bar,這會調用回Foo以在另一個方向同步,yuk。

選項二 - 擁有一個類,用於觀察三個對象中的每個對象,並在其中一個對象發生更改時更新其他對象。 (外接同步器)

選擇三 - 修改設計和數據存儲在一個類,並實現三個接口的是無論是作爲列表返回數據<酒吧>,列表<富>或列表<串>。這樣,您可以選擇一次存儲數據(並根據請求進行轉換),或者更輕鬆地保持對象的三個內部列表同步。

方法四 - 有一個更新的通用數據模型和每個對象指出,和同步這是從數據模型本身的內部名單

編輯 - 按照您的評論說,這是三個圖,觀察者模式可能是做到這一點的最佳方式。有一個共同的數據模型,每個模型都在觀察並適應圖服務所需的特定類型。

+0

肯定會選擇三個或四個。爲了讓通用列表的觀察更容易一些,你可以在那裏看到一個'BindingList ',觀察者很容易被通知基礎列表中的任何變化。 – Oliver 2010-05-11 08:12:40

+0

非常感謝! – 2010-05-11 08:39:47

2

一種方法可以是使用Observer pattern

當任何對象發生變化時,您可以讓每個對象通過Observer, 進行註冊,然後通知Observer,然後更新所有其他訂閱者。

HTH