пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Паттерны поведения. Назначение, обобщенные свойства, применение. Пример реализации.

Поведенческие шаблоны — шаблоны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов.

В поведенческих шаблонах уровня класса используется наследование, чтобы определить поведение для различных классов. В поведенческих шаблонах уровня объекта используется композиция. Некоторые из них описывают, как с помощью кооперации несколько равноправных объектов работают над заданием, которое они не могут выполнить по отдельности. Здесь важно то, как объекты получают информацию о существовании друг друга. Объекты-коллеги могут хранить ссылки друг на друга, но это усиливает степень связанности системы. При высокой связанности каждому объекту пришлось бы иметь информацию обо всех остальных. Некоторые из шаблонов решают эту проблему.

Примеры: Цепочка ответственности (Chain of responsibilily); Команда (Command); Интерпретатор (Interpreter); Итератор (Iterator); Посредник (Mediator); Хранитель (Memento); Null Object; Наблюдатель (Observer); Слуга (Servant); Specification (Specification); Состояние (State); Стратегия (Strategy); Шаблонный метод (Template method); Посетитель (Visitor)

Пример Наблюдателя Observer - создаем объект для отслеживания изменений в подсистеме и нотификации других подсистем;

public interface Observer {    

   void objectCreated(Object obj);

   void objectModified(Object obj);

}

class EmptyObserver implements Observer {

   public void objectCreated(Object obj) { }

   public void objectModified(Object obj) { }

}

class Observers<T extends Observer> extends ArrayList<T> {

   public void notifyObjectCreated(Object obj) {

      for (Iterator<T> iter = (Iterator<T>) iterator(); iter.hasNext();)

          iter.next().objectCreated(obj);

   }

   public void notifyObjectModified(Object obj) {

      for (Iterator<T> iter = (Iterator<T>) iterator(); iter.hasNext();)

          iter.next().objectModified(obj);

   }

} . . .

Observers observers = new Observers();

observers.add(new EmptyObserver() {

   public void objectCreated(Object obj) { /* реализация */ }

  }); . . .

public class Subject {

   Observers observers = new Observers();

   private Object field;

   public void setField(Object o) {

      field = o;

      observers.notifyObjectModified(this);

   } 

}


06.01.2018; 19:42
хиты: 156
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь