Observer

Предоставляет компоненту возможность гибкой рассылки сообщений интересующим его получателям.

 

Если существует необходимость посылать уведомления об изменении состояния какого либо объекта, при этом необходимо (а это, как правило, всегда желательно) сохранить слабую связанность с объектами, которым надо посылать уведомления, то целесообразно применять шаблон Observer. Объект, который может изменяться содержит внутри себя коллекцию объектов, которым нужно рассылать уведомления. По этому принципу работает событийная можель обработки в Windows, Java AWT, Java Swing, .Net Events и др. При желании получать уведомления, объект Observer, подписывается на события (добавляет себя в коллекцию целевого компонента) и тем самым получает необходимые ему уведомления. Получив уведомление, Observer может сразу же его обрабатывать, что оправдано, если обработка занимает мало времени, если же это не так – то события лучше обрабатывать в отдельных потоках (thread), в противном случае один Observer будет блокировать другие, ожидающие того же события.