Что такое поведенческие паттерны и какими они бывают – Конструктор Успеха
Что такое паттерн? В психологии паттерн в широком смысле слова — это определенный шаблон, модель действий или реакций, которая используется человеком. В узком значении слова паттерн может означать:
- Набор определенных фраз, используемых в гипнозе для введения пациента в состояние транса.
- Набор повторяющихся действий, которые приводят к определенному результату в НЛП.
- Стереотип мышления или поведения.
Паттерны используются индивидом как осознанно, так и неосознанно. Человек не в состоянии контролировать свои действия и реакции ежесекундно. Если бы ему приходилось постоянно задумываться над каждым словом и движением, сознание быстро бы «устало» от таких объемов работы. Это происходит благодаря рациональному подходу: проще выхватить готовую модель поведения, уже использовавшийся ранее блок, чем заново придумывать «ответ» в определенной ситуации.
Паттерн в психологии
Человек использует паттерны в каждой сфере своей жизни, поэтому это явление распространенное.
- Утром по дороге на работу вы встречаете соседку по лестничной площадке. Хотя вы витаете далеко в облаках, на ее приветствие машинально вежливо отвечаете «Доброе утро». Ваше приветствие «на автомате» — это социальный паттерн поведения.
- Вы просыпаетесь после бессонной ночи в обнимку с книжкой, с большим трудом открываете глаза, уныло плететесь в ванную комнату, открываете кран, берете зубную щетку, начинаете чистить зубы. Ваше сознание начинает просыпаться только в тот момент, когда вы уже прополоскали рот. Вы совершали весь этот утренний ритуал неосознанно. Это еще один положительный паттерн поведения. О них мы поговорим более подробно дальше.
- Культурные паттерны — это особенности, которые характерны для конкретной социальной группы (народа, племени). Совокупность ценностей, верований, которые отличают эту народность от всех остальных.
К примеру, при виде рыжей лисицы на картинке книжки сказок, русский ребенок испугается или насторожится, потому что лиса в нашей культуре — символ хитрости и изворотливости. Японский ребенок, увидев серебристую лисицу, да еще с девятью хвостами, улыбнется. Почему? Потому что в Стране восходящего солнца лисица олицетворяет мудрость. По мере взросления кэцуне седеет и обзаводится дополнительными хвостами.
- Яркий речевой паттерн в русском языке — это слова-паразиты. К примеру, многие привыкли заполнять паузы многозначительным «эээ» или протяжным «нуууу». Если не знаете что сказать, тогда мычите (простейший речевой паттерн).
В психологии паттерн считается составной единицей бессознательного. Некоторые сравнивают его с привычкой, что недалеко от истины. С точки зрения физиологии паттерны возникают по такой же схеме, что и рефлексы или инстинкты, но с точки зрения психологии это явление более «объемное».
Паттерны в примерах
Большой интерес представляет механизм работы паттерна. Чтобы «запустить» шаблон, достаточно затронуть какую-либо из его составных частей, то есть он активируется сразу же после активации отдельного элемента этой модели. Вспомним соседку по лестничной площадке, о которой упоминалось выше. Чтобы поздороваться, вам не обязательно услышать ее приветствие. Вы машинально пожелаете ей доброго утра, даже если заметите краем глаза во дворе.
Психологические шаблоны — это не набор бессмысленных «ритуальных» действий и реакций. Они, наоборот, наполнены смыслом, но сознание «освободилось» от этой информации, которая при регулярном повторении становится лишней. При этом информация сохраняется, но в ней нет необходимости, раз сознание уже вывело правильную поведенческую схему, то есть паттерн — это результат накопленных знаний и опыта.
Поведенческая схема может измениться только в том случае, если произойдут изменения в условиях, при которых обычно применялся паттерн. Чтобы смысл сказанного был более понятен, приведем еще два примера:
- После прихода домой, вы снимаете верхнюю одежду и обувь, идете к раковине и моете руки.
Мытье рук после улицы — это паттерн здорового человека.
- Вы сидите дома и каждые две-три минуты посещаете ванную, чтобы помыть руки. Все потому, что вам кажется, что на них кишмя кишат бактерии и микробы, как в рекламе одного известного чистящего средства. Хотя ваши действия повторяются с завидной регулярностью — это не паттерн. Поздравляем, вы страдаете от обсессивно-компульсивного расстройства.
Не все повторяющиеся действия — это паттерн, но паттерн — это всегда шаблон.
Паттерны поведения
Поведенческие паттерны — это модели реакций, которые сохраняются в сознании каждого человека. Оно вешает ярлык «шаблон» на набор действий после того, как эта модель хорошо себя зарекомендовала и «выручила» в конкретном случае. При ее повторении, сознание вытащит из шкафа с паттернами нужный шаблон, снимет его с вешалки и «подсунет» человеку, как «тренд» этой ситуации.
Чем чаще паттерн используется, тем меньше человек задумывается над моделью действий. Он просто машинально ее совершает, будучи при этом мысленно занят совершенно другими вещами. Паттернов намного больше, чем может себе представить среднестатистический человек. Их классификация очень разветвленная:
- Индивидуальные и социальные. Первые — это привычки человека и личные модели поведения, которые свойственны только для конкретного индивида. Социальные паттерны можно назвать совокупностью культурного развития и воспитания. Эти навыки помогают выживать человеку в обществе. Выживать конечно громко сказано, но уж не прослыть диким невеждой эти шаблоны точно помогут. К социальным паттернам можно отнести привычку здороваться, пожимать руки при встрече, пропускать женщину вперед, открывать двери для выходящих из здания. Социальные паттерны еще можно назвать вежливостью и умением вести себя в обществе.
- Позитивные и негативные. Здесь все очень просто. Позитивные паттерны облегчают жизнь человека. К примеру, чистить зубы по утрам — это позитивный паттерн, а тянуть свои ручонки к пачке сигарет — негативный.
Негативные паттерны отравляют жизнь человека. Многие из них по степени негативного влияния больше походят на неврозы, поэтому лечатся только при участии психотерапевта.
- Врожденные и приобретенные. Врожденные паттерны — это результат накопления знаний предков на генетическом уровне. К примеру, реакция на перелом ноги — крик. Это врожденный паттерн. Приобретенные шаблоны поведения — это результат накопленного опыта отдельного индивида. Их во многом определяет окружающая среда, воспитание, круг общения.
Паттерны поведения начинают формироваться еще в раннем детстве. Маленький ребенок похож на губку. Он жадно впитывает информацию. Если данные не отфильтруют родители или воспитатели, то малыш может подхватить много ненужного мусора и выработать в сознании неправильные паттерны, которые впоследствии станут негативными.
Следить за формированием моделей поведения у ребенка необходимо, потому что искоренить неправильные шаблоны проще всего именно в раннем возрасте, когда детская психика еще сохраняет гибкость. К примеру, можно приучить ребенка к самодисциплине, используя простой метод: сначала полезное действие, а потом приятная награда (убери игрушки в ящик, а потом возьми конфету). Этот способ поможет приучить ребенка сохранять порядок и справляться с соблазнами.
Некоторые люди могут использовать свои знания о паттернах для манипулирования другими (конечно, в корыстных целях). Шаблоны могут сыграть с вами злую шутку, если найдется человек, который изучит их достаточно хорошо и научится предугадывать, какую модель поведения предложит ваше сознание в той или иной ситуации.
Если вы хотите изучить шаблоны поведения более глубоко, то рекомендуем к прочтению книгу Эрика Берна «Люди, которые играют в игры. Игры, в которые играют люди». В этом издании простым и доступным языком, без переизбытка заумной терминологии автор излагает теорию шаблонов, по полочкам раскладывает паттерны и их влияние на жизнь человека.
Книгу можно смело назвать практическим пособием по психологии для «чайников».
что это такое и основные виды паттернов поведения.
Человек не может контролировать себя 24 часа в сутки: часть реакций и действий имеют свои спусковые механизмы и срабатывают автоматически. Одинаковому поведению, речевым оборотам, эмоциональным реакциям и жестам ученые давно дали названия. Это паттерны. В статье пойдет речь об общих характеристиках психологических паттернов, видах и способах коррекции в детском возрасте. Знания о механизме действия паттерного поведения поможет лучше понять себя и окружающих.
Что такое паттерн?
Паттерн — это доведенная до автоматизма схема или модель поведения, которую человек использует в обычной жизни. О паттернах можно говорить в любой области, где используются шаблоны поведения: ежедневная чистка зубов, утренняя чашка кофе, рукопожатие при встрече, способ нарезки овощей для супа или знакомства с новым сотрудником.
Этимологически понятие происходит от английского слова pattern – шаблон, образец. Кроме психологии паттерны встречаются в физике, математике, программировании, дизайне, музыке, строительстве, философии. С физиологической точки зрения паттерны образуются в нашем мозге по той же схеме, что и привычки. Но психологическая модель поведения – более объемное и сложное понятие, нежели рефлекс или инстинкт. Это целая программа в нашем мозге, по которой мы живем и взаимодействуем с окружающими людьми.
Пройти тест на тип личности
Еще одна интересная особенность паттерна – активизация полного шаблона поведения при активизации любой его части. Например, почувствовав аромат кофе из кофейни, мы покупаем к напитку печенье. Или погружаемся в радостные воспоминания при упоминании слова «елка». Таким образом, часть паттерна – это курок, который запускает его целиком. Специалисты называют это кодом. Но психологические модели – это не бездумные последовательности действий, а наполненные смыслом поведенческие реакции. Например, бесконечное мытье рук – это невроз. Зато мытье рук после прогулки – это паттерн.
Виды паттерного поведения.
Паттерное поведение – удобный механизм, который достался нам от предков. Оно объясняется принципом рациональности – если реакция выручила несколько раз, она выручит и в дальнейшем. Ведь намного проще пользоваться готовую модель, чем каждый раз придумывать новую.
В действительности мы используем намного больше паттернов, чем можем себе представить. Поэтому поведенческие модели имеют достаточно разветвленную классификацию:
- Социальные и индивидуальные. Социальные шаблоны – это рукопожатие, взмах рукой или поклон при встрече, привычка придерживать за собой двери или пропускать другого человека. Можно назвать это культурой. Индивидуальные шаблоны – это личные привычки человека: манера еды или вождения, последовательность действий во время утренних сборов на работу.
- Врожденные и приобретенные. Врожденные шаблоны – это наша генетика на уровне инстинктов: крик как реакция на боль, отдых после активности, улыбка при виде родного человека.
Приобретенные шаблоны появляются в результате воспитания, под влиянием родителей и окружения.
- Позитивные и негативные. Позитивные шаблоны помогают нам гармонично общаться, развиваться, следить за своим здоровьем, преодолевать препятствия. Это все полезные привычки от чистки зубов до улыбки при встрече. Негативные мешают жить, накапливают болезненный опыт, но решаются после визита к психотерапевту.
Различают паттерны:
- Коммуникативные или социальные: мимика, жесты, голос и интонации, которые человек использует при знакомстве, встрече или общении.
- Мышления: мысли, заключения, обобщения, логические выводы в результате действий окружающих людей или после событий.
- Двигательные: защитные реакции в случае опасности, позы, мимика и жесты во время общения, передвижение в пространстве.
- Эмоциональные: диапазон реакций на раздражение, обиду, юмор, комплименты, чужую агрессию.
- Языковые или лингвистические: определенные словосочетания, речевые формы, диалоги, реплики или повторы, которые мы используем в повседневной речи.
- Культурные: культурные образцы, ценности, идеи, характерные для отдельного сообщества или племени.
Зачем корректировать детские паттерны?
При рождении младенец получает базовые модели поведения. По мере взросления на врожденные шаблоны наслаиваются привычки, стереотипы, воспитание. Все вместе они формируют характер человека. Детская психика очень гибкая. Если родители внимательно следят за поведением ребенка, они смогут уловить и убрать потенциально вредные психологические модели. Для начала с ребенком можно провести «зефирный тест».
Пройти тест на характер человека
Впервые «зефирный эксперимент» или маршмеллоу-тест провел профессор социальной психологии Уолтер Мишел. Детей 4-6 лет ставили перед столом, на котором стояла тарелка с одной зефиркой. Ведущий объяснял малышу: если он просидит наедине с лакомством 15 минут и не съест, то потом получит две зефирки. Дети оставались в комнате. Кто-то дожидался до конца эксперимента, но большинство сдавались на первой минуте. Ученые проследили судьбу детей в дальнейшем. Оказалось, что терпеливые дети в дальнейшем достигали в жизни больше остальных.
Если родители захотят воспитать ребенка так, чтобы он выбирал «лакомство потом», начинать стоит с первых лет жизни: с обычной чистки зубов, уборки игрушек, подарков или других поощрений. Настойчивость и терпение родителей помогут создать ребенку паттерн самоконтроля и не соблазняться сегодняшним зефиром. Правда, совсем недавно, чистоту этого эксперимента поставили под сомнение, так как оказалось, что есть большая зависимость между тем, в насколько богатой семье рос ребенок и его способностью противостоять соблазнам. И неудивительно, что дети из богатых семей в дальнейшем имели больше шансов добиться успеха, так как могли получить лучшее образование и иметь более влиятельные связи.
Как использовать паттерны для изучения других людей?
Наблюдая за паттерным поведением других людей, можно предугадывать их поступки. Простые примеры из жизни: если знакомый постоянно берет в долг и не отдает, то и вам он денег не вернет. Если подруга критикует всех подряд, то и о вас она плохо отзывается при посторонних. Об этой особенности психики знали наши предки. Не зря жениху советовали посмотреть на будущую тещу, чтобы узнать, какой будет жена.
Другой способ использования чужих шаблонов – провокация или манипуляция поведением другого человека. Многие способы известны нам с детства: взять жертву «на слабО», польстить или восхититься, спровоцировать конфликт или скандал, вызвать чувство вины или стыда. Зная поведенческие модели знакомого человека, можно получить от него нужную информацию или вынудить совершить желаемое действие. Знание собственных паттернов поможет распознать провокатора и выработать против них устойчивый иммунитет.
За шаблонами поведения покупателей внимательно следят маркетологи. Ведь знание поведенческих паттернов – это как разведка перед боем, дает 85% результата. Знание того, «как люди покупают», помогает маркетологам воздействовать на покупателей в дальнейшем. Это выкладка дорогого товара на уровне глаз, прикассовые стенды с игрушками, быстрое оформление заказа, доставка габаритных грузов.
Отслеживание паттернов.
Поведенческие паттерны – основа человека. Наш мозг устроен таким образом, что повторенные несколько раз действия, автоматически переходят в разряд неосознаваемых. С одной стороны, доведенные до автоматизма шаблоны поведения, экономят энергию. С другой – мешают действовать осознанно, гибко переключаться в разных ситуациях, реализовать себя как личность. Негативные шаблоны поведения приводят к стрессам, тревожности, неврозам и физическим болезням:
- Привычка листать соцсети перед сном приводит к недосыпу, а привычка есть на ходу, пропускать завтрак и обед – к скачкам уровня сахара в крови, тремору, головокружению.
- Привычка обобщать все события «Мне не повезло сегодня, значит я неудачник» провоцирует плохое настроение, депрессию.
- Привычка грубить оппоненту приводит к проблемам на работе и в личной жизни.
Изменить их сложно, избавиться еще сложнее. Меняя шаблоны поведения, можно скопировать паттерны успешных людей и добиться успеха. Но изменить модель не так просто. Некоторые шаблоны поведения становятся продолжением нашей личности и нас самих.
Выводы:
- Психологические паттерны – застывшие схемы действий, имеющиеся в нашем жизненном опыте.
- Формирование психологических шаблонов запускается в детстве и в раннем возрасте их можно корректировать.
- Наши шаблоны поведения оберегают и ограничивают одновременно.
- Убрать негативные паттерны сложно, проще заменить их позитивными.
Пройти тест на эмоциональный интеллект EQ
Модель поведения Определение и значение
- Основные определения
- Викторина
- Примеры
Показывает уровень оценки в зависимости от сложности слова.
Сохрани это слово!
Показывает уровень сложности слова.
сущ.
повторяющийся способ действия индивидуума или группы по отношению к данному объекту или в данной ситуации.
ВИКТОРИНА
Сыграем ли мы в «ДОЛЖЕН» ПРОТИВ. «ДОЛЖЕН» ВЫЗОВ?
Следует ли вам пройти этот тест на «должен» или «должен»? Это должно оказаться быстрым вызовом!
Вопрос 1 из 6
Какая форма обычно используется с другими глаголами для выражения намерения?
Происхождение поведенческого паттерна
Впервые записано в 1955–1960 гг. поведенческая раковина
Dictionary.com Полный текст На основе Random House Unabridged Dictionary, © Random House, Inc. 2022
Как использовать модель поведения в предложении
Ученый-бабочка, консультирующий нас, знал, что его объекты исследования обладают высокой отражающей способностью в ультрафиолетовом диапазоне, но у него было только вывел это из графических моделей поведения.
Жизнь Дэвида Аттенборо в цвете — Выпуск 107: Край|Мэри Эллен Ганнибал|29 сентября 2021 г.|Наутилус
Автоматизированные системы Google «используют сотни сигналов для обнаружения оскорбительного поведения, такого как изменение шаблонов отзывов о компании и неправдоподобные модели поведения рецензентов», — сказал представитель компании Search Engine Land.
Как Google и Yelp справляются с поддельными отзывами и нарушениями правил|Джордж Нгуен|30 августа 2021 г.|Search Engine Land
Как и в любой неблагополучной семье, в конце концов, модели поведения обычно исходят от матери.
‘Актерский актер’. Алия Шокат об остротах, мемах и комедийном наследии Джессики Уолтер | Алия Шокат | 2 апреля 2021 г. | Время
И во многих из этих событий быстро проявилась схема «винить жертву».
В 2015 году давайте попробуем проявить больше сострадания|Джин Робинсон|4 января 2015 года|DAILY BEAST
Гнев часто проявляется у холдеров как еще одно саморазрушительное, но более социально приемлемое чувство или поведение, например тревога.
Могут ли книги по самопомощи действительно изменить вас?|Лиззи Крокер|29 декабря 2014 г.|DAILY BEAST
Команда отслеживала людей издалека, чтобы понять их поведение.
Мангусты, сурикаты и муравьи, о боже! Почему некоторые животные продолжают спариваться со всеми в семье|Хелен Томпсон|29 декабря 2014|DAILY BEAST
Но похоже, что он был создан сумасшедшим человеком с обсессивно-компульсивным поведением.
Бюджетная волокита душит добрых самаритян|Филип К. Ховард|27 декабря 2014|DAILY BEAST
Я бы сказал им: «Не попадайте в шаблон, в котором вас пугают подобные преступные нападения». .
Должны ли США действительно платить выкуп за Кима?|Кевин Блейер|21 декабря 2014|DAILY BEAST
Кроме того, большинство нор находились всего в нескольких футах друг от друга, и никакого агонистического поведения не наблюдалось.
Летние птицы с полуострова Юкатан|Эрвин Э. Клаас
Стук молота всегда в его ушах, и его взгляд прикован к модели сосуда, который он делает.
Библия, версия Дуэ-Реймса|Разное
Ее взгляд остановился на круглой части рисунка обоев, и она почувствовала, что вся комната вращается вокруг нее.
Hilda Lessways|Arnold Bennett
Антониус и Иеронимус совместно изготовили несколько скрипок с крупным узором, высококачественной отделки и красивого дерева.
Скрипки и скрипичные мастера|Джозеф Пирс
К сожалению, все заинтересованные строители не согласовали какой-то один шаблон.
Недавняя революция в органостроении|Джордж Лэнг Миллер
Цепочка ответственности
/ Шаблоны проектирования / Поведенческие модели
Также известен как: CoR, Chain of Command
НамерениеЦепочка ответственности — это поведенческий шаблон проектирования, позволяющий передавать запросы по цепочке обработчиков. Получив запрос, каждый обработчик решает либо обработать запрос, либо передать его следующему обработчику в цепочке.
ПроблемаПредставьте, что вы работаете над системой онлайн-заказов. Вы хотите ограничить доступ к системе, чтобы только авторизованные пользователи могли создавать заказы. Кроме того, пользователи с правами администратора должны иметь полный доступ ко всем заказам.
После небольшого планирования вы поняли, что эти проверки должны выполняться последовательно. Приложение может попытаться аутентифицировать пользователя в системе всякий раз, когда оно получает запрос, содержащий учетные данные пользователя. Однако, если эти учетные данные неверны и аутентификация не удалась, нет причин продолжать какие-либо другие проверки.
Запрос должен пройти ряд проверок, прежде чем система заказов сможет его обработать.
В течение следующих нескольких месяцев вы реализовали еще несколько таких последовательных проверок.
Один из ваших коллег предположил, что передавать необработанные данные прямо в систему заказов небезопасно. Итак, вы добавили дополнительный шаг проверки для очистки данных в запросе.
Позже кто-то заметил, что система уязвима для взлома паролей методом грубой силы. Чтобы предотвратить это, вы быстро добавили проверку, которая отфильтровывает повторяющиеся неудачные запросы, поступающие с одного и того же IP-адреса.
Кто-то еще предложил ускорить работу системы, возвращая кэшированные результаты при повторных запросах, содержащих одни и те же данные.
Следовательно, вы добавили еще одну проверку, которая пропускает запрос в систему, только если нет подходящего кэшированного ответа.
Чем больше код рос, тем запутаннее он становился.
Код чеков, и без того выглядевший кашей, становился все более и более раздутым по мере добавления каждой новой функции. Изменение одного чека иногда влияло на другие. Хуже всего то, что когда вы пытались повторно использовать проверки для защиты других компонентов системы, вам приходилось дублировать часть кода, поскольку эти компоненты требовали некоторых проверок, но не всех.
Система стала очень сложной для понимания и дорогой в обслуживании. Вы какое-то время боролись с кодом, пока однажды не решили провести рефакторинг всего этого.
Решение Как и многие другие поведенческие шаблоны проектирования, цепочка ответственности основана на преобразовании определенных поведений в автономные объекты, называемые обработчиками . В нашем случае каждая проверка должна быть извлечена в свой класс с помощью одного метода, выполняющего проверку. Запрос вместе со своими данными передается этому методу в качестве аргумента.
Шаблон предлагает связать эти обработчики в цепочку. Каждый связанный обработчик имеет поле для хранения ссылки на следующий обработчик в цепочке. Помимо обработки запроса, обработчики передают запрос дальше по цепочке. Запрос перемещается по цепочке до тех пор, пока все обработчики не получат возможность его обработать.
Вот самое приятное: обработчик может принять решение не передавать запрос дальше по цепочке и эффективно остановить дальнейшую обработку.
В нашем примере с системами заказов обработчик выполняет обработку, а затем решает, передать ли запрос дальше по цепочке. Предполагая, что запрос содержит правильные данные, все обработчики могут выполнять свое основное поведение, будь то проверка подлинности или кэширование.
Обработчики выстраиваются один за другим, образуя цепочку.
Однако есть немного другой подход (и он немного более каноничный), при котором, получив запрос, обработчик решает, может ли он его обработать. Если это возможно, он не передает запрос дальше. Таким образом, либо только один обработчик обрабатывает запрос, либо вообще ничего. Этот подход очень распространен при работе с событиями в стеках элементов в графическом пользовательском интерфейсе.
Например, когда пользователь нажимает кнопку, событие распространяется по цепочке элементов графического интерфейса, которая начинается с кнопки, проходит по ее контейнерам (таким как формы или панели) и заканчивается главным окном приложения. Событие обрабатывается первым элементом в цепочке, способным его обработать. Этот пример также примечателен тем, что он показывает, что цепочку всегда можно извлечь из дерева объектов.
Цепочка может быть сформирована из ветви дерева объектов.
Крайне важно, чтобы все классы обработчиков реализовывали один и тот же интерфейс. Каждый конкретный обработчик должен заботиться только о следующем, имеющем метод
execute
. Таким образом, вы можете создавать цепочки во время выполнения, используя различные обработчики, не связывая свой код с их конкретными классами.
Звонок в службу технической поддержки может проходить через нескольких операторов.
Вы только что купили и установили на свой компьютер новое оборудование. Поскольку вы гик, на компьютере установлено несколько операционных систем. Вы пытаетесь загрузить их все, чтобы увидеть, поддерживается ли оборудование. Windows автоматически обнаруживает и включает оборудование. Однако ваш любимый линукс отказывается работать с новым железом. С небольшим проблеском надежды вы решаете позвонить по телефону техподдержки, указанному на коробке.
Первое, что вы слышите, это механический голос автоответчика. Он предлагает девять популярных решений различных проблем, ни одно из которых не имеет отношения к вашему делу. Через некоторое время робот подключает вас к живому оператору.
Увы, ничего конкретного оператор тоже подсказать не может. Он продолжает цитировать длинные выдержки из руководства, отказываясь слушать ваши комментарии. Услышав фразу «вы пробовали выключить и снова включить компьютер?» в 10-й раз вы требуете, чтобы вас соединили с настоящим инженером.
В конце концов, оператор передает ваш звонок одному из инженеров, который, вероятно, часами жаждал живого человеческого общения, сидя в своей одинокой серверной в темном подвале какого-то офисного здания. Инженер расскажет вам, где скачать подходящие драйверы для вашего нового оборудования и как установить их в Linux. Наконец-то решение! Вы заканчиваете разговор, разрываясь от радости.
СтруктураОбработчик объявляет интерфейс, общий для всех конкретных обработчиков. Обычно он содержит только один метод для обработки запросов, но иногда может иметь и другой метод для установки следующего обработчика в цепочке.
Базовый обработчик — это необязательный класс, в который можно поместить шаблонный код, общий для всех классов обработчиков.
Обычно этот класс определяет поле для хранения ссылки на следующий обработчик. Клиенты могут построить цепочку, передав обработчик конструктору или сеттеру предыдущего обработчика. Класс также может реализовать поведение обработки по умолчанию: он может передать выполнение следующему обработчику после проверки его существования.
Бетонные обработчики содержат фактический код для обработки запросов. При получении запроса каждый обработчик должен решить, обрабатывать ли его и, дополнительно, передавать ли по цепочке.
Обработчики обычно автономны и неизменяемы, принимая все необходимые данные только один раз через конструктор.
Клиент может составлять цепочки только один раз или составлять их динамически, в зависимости от логики приложения.
Обратите внимание, что запрос может быть отправлен любому обработчику в цепочке — он не обязательно должен быть первым.
В этом примере шаблон Цепочка ответственности отвечает за отображение контекстной справочной информации для активных элементов графического интерфейса.
Классы GUI построены по шаблону Composite. Каждый элемент связан со своим элементом-контейнером. В любой момент вы можете построить цепочку элементов, которая начинается с самого элемента и проходит через все его элементы-контейнеры.
Графический интерфейс приложения обычно имеет структуру дерева объектов. Например, Dialog
Класс, который отображает главное окно приложения, будет корнем дерева объектов. Диалог содержит Панели
, которые могут содержать другие панели или простые низкоуровневые элементы, такие как Кнопки
и Текстовые поля
.
Простой компонент может отображать краткие контекстные всплывающие подсказки, если компоненту назначен текст справки. Но более сложные компоненты определяют свой собственный способ отображения контекстной справки, например, показ выдержки из руководства или открытие страницы в браузере.
Вот как запрос на помощь проходит через объекты GUI.
Когда пользователь наводит курсор мыши на элемент и нажимает клавишу F1
, приложение обнаруживает компонент под указателем и отправляет ему запрос на помощь. Запрос проходит через все контейнеры элемента, пока не достигнет элемента, способного отображать справочную информацию.
// Интерфейс обработчика объявляет метод для выполнения
// запрос.
Интерфейс ComponentWithContextualHelp
метод showHelp()
// Базовый класс для простых компонентов.
абстрактный класс Компонент реализует ComponentWithContextualHelp
поле tooltipText: строка
// Контейнер компонента действует как следующая ссылка в
// цепочка обработчиков.
Контейнер защищенного поля: Контейнер
// Компонент показывает всплывающую подсказку, если есть текст справки
// присвоено ему.
В противном случае вызов перенаправляется на
// контейнер, если он существует.
метод showHelp() есть
если (текст подсказки != ноль)
// Показать всплывающую подсказку.
еще
контейнер.showHelp()
// Контейнеры могут содержать как простые компоненты, так и другие
// контейнеры как дочерние элементы. Цепные отношения
// установлено здесь. Класс наследует поведение showHelp от
// его родитель.
абстрактный класс Контейнер расширяет компонент
дочерние элементы защищенного поля: массив компонентов
метод add(child) есть
дети.добавить(ребенок)
ребенок.контейнер = это
// Примитивные компоненты могут работать со справкой по умолчанию
// реализация...
Класс Кнопка расширяет Компонент
// ...
// Но сложные компоненты могут переопределить значение по умолчанию
// реализация. Если текст справки не может быть предоставлен в новом
// таким образом, компонент всегда может вызвать базовую реализацию
// (см. Класс компонента).
класс Panel расширяет контейнер
поле modalHelpText: строка
метод showHelp() есть
если (modalHelpText != ноль)
// Показать модальное окно с текстом справки.
еще
супер.showHelp()
// ...то же, что и выше...
диалоговое окно класса расширяет контейнер
поле wikiPageURL: строка
метод showHelp() есть
если (wikiPageURL != ноль)
// Открытие страницы справки вики.
еще
супер.showHelp()
// Клиентский код.
приложение класса
// Каждое приложение настраивает цепочку по-своему.
метод createUI() есть
диалог = новый диалог ("Бюджетные отчеты")
dialog.wikiPageURL = "http://..."
панель = новая панель (0, 0, 400, 800)
panel.modalHelpText = "Эта панель делает..."
ок = новая кнопка (250, 760, 50, 20, "ОК")
ok.tooltipText = "Это кнопка OK, которая..."
отмена = новая кнопка (320, 760, 50, 20, "Отмена")
// ...
панель.добавить(ок)
панель.добавить(отмена)
диалог.добавить(панель)
// Представьте, что здесь происходит.
метод onF1KeyPress() есть
компонент = this.getComponentAtMouseCoords()
компонент.
showHelp()
ПрименимостьИспользуйте шаблон цепочки ответственности, когда ваша программа должна обрабатывать различные типы запросов различными способами, но точные типы запросов и их последовательность заранее неизвестны.
Паттерн позволяет связать несколько обработчиков в одну цепочку и при получении запроса «спросить» у каждого обработчика, может ли он его обработать. Таким образом, все обработчики получают возможность обработать запрос.
Используйте шаблон, когда необходимо выполнить несколько обработчиков в определенном порядке.
Поскольку вы можете связывать обработчики в цепочке в любом порядке, все запросы будут проходить через цепочку именно так, как вы планировали.
Используйте шаблон CoR, когда набор обработчиков и их порядок должны измениться во время выполнения.
Если вы предоставляете сеттеры для ссылочного поля внутри классов обработчиков, вы сможете динамически вставлять, удалять или изменять порядок обработчиков.
Объявить интерфейс обработчика и описать сигнатуру метода для обработки запросов.
Решите, как клиент будет передавать данные запроса в метод. Самый гибкий способ — преобразовать запрос в объект и передать его методу обработки в качестве аргумента.
Чтобы устранить повторяющийся шаблонный код в конкретных обработчиках, возможно, стоит создать абстрактный базовый класс обработчика, производный от интерфейса обработчика.
Этот класс должен иметь поле для хранения ссылки на следующий обработчик в цепочке. Подумайте о том, чтобы сделать класс неизменяемым. Однако, если вы планируете изменять цепочки во время выполнения, вам необходимо определить установщик для изменения значения поля ссылки.
Вы также можете реализовать удобное поведение по умолчанию для метода обработки, которое заключается в перенаправлении запроса к следующему объекту, если такового не осталось. Конкретные обработчики смогут использовать это поведение, вызвав родительский метод.
Один за другим создайте конкретные подклассы обработчиков и реализуйте их методы обработки. Каждый обработчик должен принять два решения при получении запроса:
- Будет ли обрабатываться запрос.
- Будет ли передаваться запрос по цепочке.
Клиент может либо собирать цепочки самостоятельно, либо получать готовые цепочки от других объектов. В последнем случае необходимо реализовать некоторые фабричные классы для построения цепочек в соответствии с настройками конфигурации или среды.
Клиент может вызвать любой обработчик в цепочке, а не только первый. Запрос будет передаваться по цепочке до тех пор, пока какой-либо обработчик не откажется передавать его дальше или пока он не достигнет конца цепочки.
Из-за динамического характера цепочки клиент должен быть готов к следующим сценариям:
- Цепь может состоять из одного звена.
- Некоторые запросы могут не достигать конца цепочки.
- Другие могут достичь конца цепочки без обработки.
- Вы можете управлять порядком обработки запросов.
- Принцип единой ответственности . Вы можете отделить классы, которые вызывают операции от классов, которые выполняют операции.
- Открытый/Закрытый принцип . Вы можете добавлять в приложение новые обработчики, не нарушая существующий клиентский код.
- Некоторые запросы могут остаться необработанными.
Chain of Responsibility, Command, Mediator и Observer рассматривают различные способы соединения отправителей и получателей запросов:
- Цепочка ответственности передает запрос последовательно по динамической цепочке потенциальных получателей, пока один из них не обработает его.
- Команда устанавливает однонаправленные соединения между отправителями и получателями.
- Посредник устраняет прямые соединения между отправителями и получателями, заставляя их взаимодействовать косвенно через объект-посредник.
- Observer позволяет получателям динамически подписываться и отменять подписку на получение запросов.
- Цепочка ответственности передает запрос последовательно по динамической цепочке потенциальных получателей, пока один из них не обработает его.
Chain of Responsibility часто используется в сочетании с Composite. В этом случае, когда листовой компонент получает запрос, он может передать его по цепочке всех родительских компонентов до корня дерева объектов.
Обработчики в цепочке ответственности могут быть реализованы как команды. В этом случае вы можете выполнять множество различных операций над одним и тем же объектом контекста, представленным запросом.
Однако есть и другой подход, когда сам запрос представляет собой Команда объект. В этом случае вы можете выполнять одну и ту же операцию в ряде различных контекстов, связанных в цепочку.