У меня есть три класса, взаимодействующих интересным способом. Один из них является модельным классом, и к нему должны быть доступны оба других класса, поэтому один его экземпляр хранится как член каждого из них. Оба этих класса взаимодействуют с моделью по-разному.Модель, разделенная между двумя объектами
Существует несколько случаев, когда объект модели должен быть полностью выброшен и заменен новым экземпляром, что усложняет ситуацию. И эти случаи возникают в обоих классах просмотра/контроля. Таким образом, любой из этих классов должен иметь возможность посылать сигнал другому: «Нам нужно координировать и облегчать замену нашего объекта модели новым объектом модели». Прямо сейчас у меня есть код в классе B, чтобы сообщить классу A построить новую модель и отправить ее обратно, но теперь мне нужно обработать противоположную ситуацию, когда событие возникает в классе A, и, к сожалению, класс A не имеет ссылки на класс B, и, вероятно, не следует.
Что такое хороший способ справиться с этим?
Обновление: Извините, это не может быть одноэлементный. Синглтоны - это когда вам нужно гарантировать, что есть только одно. Это не имеет никакого отношения ни к одному из требований, изложенных выше. Этот класс не является синглом и не должен быть.
Update: До сих пор, там на самом деле только был один экземпляр этого класса модели, но у меня было смутное подозрение, мне нужно, чтобы позволить больше, и я не хочу ограничивать себя с помощью Singleton когда это действительно затрагивает различные проблемы из того, что у меня есть. Оказывается, я был прав: вчера я получил новое требование, и теперь мне нужна поддержка произвольного числа из них. :) Не ограничивайте себя, когда вам это не нужно, и не злоупотребляйте шаблонами проектирования в ситуациях, когда они не предназначены!
Я полностью согласен. Владелец модели является владельцем модели. Он управляет жизненным циклом модели, включая запросы на обслуживание клиентов, чтобы попросить, чтобы модель была заменена новой. Клиенты могут регистрировать слушателя для уведомления об изменениях (например, новой модели). –
Я думаю, что я собираюсь с измененной версией этого.ClassA на самом деле является ModelHolder, в некотором смысле, поэтому я просто реализовал интерфейс прослушивателя, который будет реализован ClassB, чтобы получать уведомления о появлении нового объекта Model, который он должен получить. – skiphoppy
hm. да? Не нужно подвергать действию разные модели! Пусть SuperModel отправит своим слушателям «я обновлен», когда изменил его внутреннее представление. COmpare, как работает StatePattern. – KarlP