В моем текущем проекте я использую несколько классов, каждый из которых представляет какое-то периферийное устройство.Каждый класс предоставляет оба метода для ввода, а также обратные вызовы для вывода.Некоторые выходные данные из одного класса должны использоваться в качестве входных данных для другого класса, поэтому простой дизайн - позволить клиенту реализовать все обратные вызовы и обрабатывать всю маршрутизацию между объектами.
Это можно проиллюстрировать на следующем упрощенном примере.В моем приложении число классов, а также входов и выходов выше.
interface CentralLockControlCb
{
void onCentralLockStateChanged(bool on);
}
class CentralLockControl
{
void setDoorLockedIndicator(bool locked);
}
interface DoorControlCb
{
void onDoorLockedStateChanged(bool locked);
}
class DoorControl
{
void setCentralLockState(bool on);
}
class Main : public CentralLockControlCb, DoorControlCb
{
private CentralLockControl centrallock;
private DoorControl door;
public static void main(String[] args)
{
clc = new CentralLockControl(this);
dc = new DoorControl(this);
}
void onCentralLockStateChanged(bool on)
{
door.setCentralLockState(on);
}
void onDoorLockedStateChanged(bool locked)
{
centrallock.setDoorLockedIndicator(locked);
}
}
Приведенное выше решение не требует, чтобы классы знали друг о друге, но, с другой стороны, теперь они кажутся очень связанными сОсновной класс.
В качестве альтернативы я рассмотрел вопрос о том, чтобы позволить каждому классу допускать нескольких наблюдателей и позволять классам наблюдать друг за другом.В качестве другой альтернативы я рассмотрел что-то похожее на шаблон издателя / подписчика, но похоже
Какой дизайн вы бы порекомендовали для такой проблемы?