Nested functions in Java


2 декабря 2009

The task was to write a method to check some internal data structure recursively and return the answer (42 :) ). Naturally, anybody would write something like:


boolean validate() {
   return check(_struct);
}
private boolean check(Struct struct) {
   if (!struct.valid()) return false;
   for(Struct child : struct.children()) {
     if (!check(child)) return false;
   }
   return true;
}

According to the spirit of the idiom of code locality that private method should be moved to validate(). But what the heck — no nested functions in Java :???: So here is the decent workaround:
Читать далее »»

При использовании Typed Message сообщения рассылаются всем адресатам, подписанных на получение сообщения.

Проблема возникает, когда сообщение не нужно посылать всем адресатам, если оно не может быть принято одним из них. Например, в каркасе приложения главное окно должно закрыться, и посылает всем дочерним окнам сообщение о закрытии, но какое-то дочернее окно не может закрыться прямо сейчас, соответственно адекватным поведением было бы прекращение дальнейшей рассылки сообщения о закрытии и отмене закрытия главного окна.
Существуют ситуации, когда рассылка одного и того же сообщения должна происходить избирательно по адресатам, например, учитывая их состояние. Читать далее »»

В предыдущей заметке были исправлены ошибки эталонной реализации паттерна проектирования Typed Message. Далее речь пойдет о способе применения паттерна на тривиальном примере на C++.
Как упоминалось ранее, с помощью Typed Message можно определять сущности широковещательных сообщений. Подходящая аналогия для таких сущностей - радиоволны в идеальном радиоэфире.

Постановка задачи
Читать далее »»

Паттерн был опубликован в классической работе Влиссидеса в далеком 1997 году как вариация известного всем Observer.
В отличие от Observer, паттерн Typed Message полагается не на ручную диспечеризацию сообщений с помощью dynamic_cast, а на автоматическую проверку типов компилятором. Именно это свойство Typed Message делает этот паттерн лучшей релизацией идеи широковещательных сообщений на подобии Observer.
При попытке использовать реализацию предложеную Полом Пелетье в той же работе Влиссидеса пользователь сталкивается с неприятностями ввиде выделения лишней памяти, краха процесса и просто неудобства работы с шаблоном. Читать далее »»