我如何同步三个班级?

时间:2010-05-11 07:29:44

标签: c# design-patterns oop

class Foo
{
    Bar b;
    List<Foo> Neighbours;
}

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

class Spam
{
    List<string> Neighbours; 
}

每个类都有AddNeighbourRemoveNeighbour方法。

用户可以随机添加/删除任何类中的邻居。

我希望这三个对象位于 sync

我该怎么做?

2 个答案:

答案 0 :(得分:4)

选项一 - 让Foo在更新后调用Bar并调用Bar Spam。这将导致紧密耦合的对象,你可能还需要将垃圾邮件回调给Bar,它回调Foo以在另一个方向同步,yuk。

选项二 - 拥有一个观察三个对象中的每一个的类,并在一个对象发生更改时更新其他对象。 (外部同步器)

选项三 - 修改设计并将数据存储在一个类中,并实现三个接口,这些接口将数据作为List&lt; Bar&gt ;, List&lt; Foo&gt;返回。或列表&lt; string&gt;。这样,您可以选择存储数据一次(并按要求进行转换)或使对象的三个内部列表更容易同步。

选项四 - 拥有一个更新的公共数据模型,每个对象都会观察到它并从数据模型中同步它自己的内部列表

编辑 - 根据您的评论,这是针对三个图表,观察者模式可能是执行此操作的最佳方式。有一个共同的数据模型,每个模型都观察并适应其服务图所需的特定类型。

答案 1 :(得分:2)

一种方法可能是使用Observer pattern

您可以让每个对象向Observer注册, 当任何对象发生变化时,它会通知Observer,后者会更新所有其他订户。

HTH

相关问题