Как я могу синхронизировать три класса? - PullRequest
3 голосов
/ 11 мая 2010
class Foo
{
    Bar b;
    List<Foo> Neighbours;
}

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

class Spam
{
    List<string> Neighbours; 
}

Каждый из этих классов имеет AddNeighbour, RemoveNeighbour методы.

Пользователь может произвольно добавлять / удалять соседей из любого класса.

Я хочу, чтобы эти три объекта были синхронизированы .

Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 11 мая 2010

Вариант 1 - иметь Foo call Bar, когда он обновляется, и Bar вызывать Spam. Это приведет к плотно связанным объектам, и вам, вероятно, также понадобится, чтобы Spam перезвонил Bar, который перезванивает Foo для синхронизации в другом направлении, yuk.

Вариант два - Имейте класс, который наблюдает за каждым из трех объектов и обновляет другие, когда один изменяется. (Внешний синхронизатор)

Вариант 3 - Пересмотреть проект и сохранить данные в ОДНОМ классе и реализовать три интерфейса, которые возвращают данные в виде списка , списка или списка . Таким образом, вы можете сохранить данные один раз (и выполнить преобразование по запросу) или упростить синхронизацию трех внутренних списков объекта.

Вариант четвертый - иметь общую модель данных, которая обновляется, и каждый объект наблюдает это и синхронизирует свой собственный внутренний список из модели данных

РЕДАКТИРОВАТЬ - После вашего комментария, что это для трех графиков, паттерн наблюдателя, вероятно, лучший способ сделать это. Иметь единую общую модель данных, которую каждый наблюдает и адаптирует к конкретному типу, требуемому графиком его обслуживания.

2 голосов
/ 11 мая 2010

Одним из подходов может быть использование шаблона Observer .

Вы можете зарегистрировать каждый объект в Observer, когда любой объект изменяется, он уведомляет Обозревателя, который затем обновляет всех других подписчиков.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...