Я ищу дизайн, который удовлетворяет следующим требованиям:
Существует один публично видимый объект, который имеет следующий интерфейс:
class Whatever
{
Whatever& GetIntstance();
void UpdateData1(POD d1); // POD: Plain old datatype
void UpdateData2(POD d2);
// ...
void UpdateDataN(POD dN);
bool Question1();
bool Question2();
// ...
bool QuestionM();
}
Где void UpdateDataX(POD dX) (1 <= X <= N)
задает некоторое внутреннее состояние.
Где bool QuestionY() (1 <= Y <= M)
задает вопрос "да / нет" и вычисляется из внутреннего состояния.
Какой бы ни был экземпляр, возможно, не знает, как ответить на все Вопросы.В случае, если он не знает, как ответить на вопрос, ему необходимо делегировать ответственность. У разных вопросов могут быть разные делегаты. У делегата может быть делегат. При делегировании вопроса объект должен предоставить делегату доступ для чтения к своему состоянию и состоянию всего, что ему делегировано. Делегату может потребоваться много времени для ответа на вопрос (не спрашивайте почему), поэтому его ответ может быть кэширован.Это означает, что делегат должен быть уведомлен, если состояние, от которого он зависит, изменяется.Это также означает, что делегаты должны быть уведомлены о вызове UpdateDataX.
Предположим, что древовидная структура (структура DAG или любая другая структура) делегатов является фиксированной после ее создания.