Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!Шпора по ООПиП (3).docx
Скачиваний:
35
Добавлен:
22.09.2019
Размер:
2.31 Mб
Скачать

87. Поведенческие шаблоны

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

Использование

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

Примеры

  • Цепочка ответственности

  • Команда, Action, Transaction

  • Интерпретатор

  • Итератор, Cursor

  • Посредник

  • Хранитель, Token

  • Null Object (Null object)

  • Наблюдатель, Dependents, Publish-Subscribe, Listener

  • Слуга (Servant)

  • Specification (Specification)

  • Состояние, Objects for States

  • Стратегия

  • Шаблонный метод

  • Посетитель

  • Simple Policy

  • Event listener

  • Single-serving visitor

  • Hierarchical visitor

88. Цепочка ответственности (шаблон проектирования)

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

Применение

Шаблон рекомендован для использования в условиях:

  • в разрабатываемой системе имеется группа объектов, которые могут обрабатывать сообщения определенного типа;

  • все сообщения должны быть обработаны хотя бы одним объектом системы;

  • сообщения в системе обрабатываются по схеме «обработай сам либо перешли другому», то есть одни сообщения обрабатываются на том уровне, где они получены, а другие пересылаются объектам иного уровня.

using System;

namespace ChainOfResponsibility

{

class Program

{

static void Main(string[] args)

{

Handler start = null;

for (int i = 5; i > 0; i--)

{

Console.WriteLine("Handler " + i + " deals up to a limit of " + i * 1000);

start = new Handler(i, start);

}

int[] a = { 50, 2000, 1500, 10000, 175, 4500 };

foreach (int i in a)

Console.WriteLine(start.HandleRequest(i));

}

}

class Handler

{

Handler next;

int id;

public int Limit { get; set; }

public Handler(int id, Handler handler)

{

this.id = id;

Limit = id * 1000;

next = handler;

}

public string HandleRequest(int data)

{

if (data < Limit)

return "Request for " + data + " handled at level " + id;

else if (next != null)

return next.HandleRequest(data);

else return ("Request for " + data + " handled BY DEFAULT at level " + id);

}

}

}