Вариант 1 - иметь Foo call Bar, когда он обновляется, и Bar вызывать Spam. Это приведет к плотно связанным объектам, и вам, вероятно, также понадобится, чтобы Spam перезвонил Bar, который перезванивает Foo для синхронизации в другом направлении, yuk.
Вариант два - Имейте класс, который наблюдает за каждым из трех объектов и обновляет другие, когда один изменяется. (Внешний синхронизатор)
Вариант 3 - Пересмотреть проект и сохранить данные в ОДНОМ классе и реализовать три интерфейса, которые возвращают данные в виде списка , списка или списка . Таким образом, вы можете сохранить данные один раз (и выполнить преобразование по запросу) или упростить синхронизацию трех внутренних списков объекта.
Вариант четвертый - иметь общую модель данных, которая обновляется, и каждый объект наблюдает это и синхронизирует свой собственный внутренний список из модели данных
РЕДАКТИРОВАТЬ - После вашего комментария, что это для трех графиков, паттерн наблюдателя, вероятно, лучший способ сделать это. Иметь единую общую модель данных, которую каждый наблюдает и адаптирует к конкретному типу, требуемому графиком его обслуживания.