что это такое и основные виды паттернов поведения.
Человек не может контролировать себя 24 часа в сутки: часть реакций и действий имеют свои спусковые механизмы и срабатывают автоматически. Одинаковому поведению, речевым оборотам, эмоциональным реакциям и жестам ученые давно дали названия. Это паттерны. В статье пойдет речь об общих характеристиках психологических паттернов, видах и способах коррекции в детском возрасте. Знания о механизме действия паттерного поведения поможет лучше понять себя и окружающих.
Что такое паттерн?
Паттерн — это доведенная до автоматизма схема или модель поведения, которую человек использует в обычной жизни. О паттернах можно говорить в любой области, где используются шаблоны поведения: ежедневная чистка зубов, утренняя чашка кофе, рукопожатие при встрече, способ нарезки овощей для супа или знакомства с новым сотрудником.
Этимологически понятие происходит от английского слова pattern – шаблон, образец. Кроме психологии паттерны встречаются в физике, математике, программировании, дизайне, музыке, строительстве, философии. С физиологической точки зрения паттерны образуются в нашем мозге по той же схеме, что и привычки. Но психологическая модель поведения – более объемное и сложное понятие, нежели рефлекс или инстинкт. Это целая программа в нашем мозге, по которой мы живем и взаимодействуем с окружающими людьми.
Пройти тест на тип личности
Еще одна интересная особенность паттерна – активизация полного шаблона поведения при активизации любой его части. Например, почувствовав аромат кофе из кофейни, мы покупаем к напитку печенье. Или погружаемся в радостные воспоминания при упоминании слова «елка». Таким образом, часть паттерна – это курок, который запускает его целиком. Специалисты называют это кодом. Но психологические модели – это не бездумные последовательности действий, а наполненные смыслом поведенческие реакции. Например, бесконечное мытье рук – это невроз. Зато мытье рук после прогулки – это паттерн.
Виды паттерного поведения.
Паттерное поведение – удобный механизм, который достался нам от предков. Оно объясняется принципом рациональности – если реакция выручила несколько раз, она выручит и в дальнейшем. Ведь намного проще пользоваться готовую модель, чем каждый раз придумывать новую.
В действительности мы используем намного больше паттернов, чем можем себе представить. Поэтому поведенческие модели имеют достаточно разветвленную классификацию:
- Социальные и индивидуальные. Социальные шаблоны – это рукопожатие, взмах рукой или поклон при встрече, привычка придерживать за собой двери или пропускать другого человека. Можно назвать это культурой. Индивидуальные шаблоны – это личные привычки человека: манера еды или вождения, последовательность действий во время утренних сборов на работу.
- Врожденные и приобретенные. Врожденные шаблоны – это наша генетика на уровне инстинктов: крик как реакция на боль, отдых после активности, улыбка при виде родного человека. Приобретенные шаблоны появляются в результате воспитания, под влиянием родителей и окружения.
- Позитивные и негативные. Позитивные шаблоны помогают нам гармонично общаться, развиваться, следить за своим здоровьем, преодолевать препятствия. Это все полезные привычки от чистки зубов до улыбки при встрече. Негативные мешают жить, накапливают болезненный опыт, но решаются после визита к психотерапевту.
Различают паттерны:
- Коммуникативные или социальные: мимика, жесты, голос и интонации, которые человек использует при знакомстве, встрече или общении.
- Мышления: мысли, заключения, обобщения, логические выводы в результате действий окружающих людей или после событий.
- Двигательные: защитные реакции в случае опасности, позы, мимика и жесты во время общения, передвижение в пространстве.
- Эмоциональные: диапазон реакций на раздражение, обиду, юмор, комплименты, чужую агрессию.
- Языковые или лингвистические: определенные словосочетания, речевые формы, диалоги, реплики или повторы, которые мы используем в повседневной речи.
- Культурные: культурные образцы, ценности, идеи, характерные для отдельного сообщества или племени.
Зачем корректировать детские паттерны?
При рождении младенец получает базовые модели поведения. По мере взросления на врожденные шаблоны наслаиваются привычки, стереотипы, воспитание. Все вместе они формируют характер человека. Детская психика очень гибкая. Если родители внимательно следят за поведением ребенка, они смогут уловить и убрать потенциально вредные психологические модели. Для начала с ребенком можно провести «зефирный тест».
Пройти тест на характер человека
Впервые «зефирный эксперимент» или маршмеллоу-тест провел профессор социальной психологии Уолтер Мишел. Детей 4-6 лет ставили перед столом, на котором стояла тарелка с одной зефиркой. Ведущий объяснял малышу: если он просидит наедине с лакомством 15 минут и не съест, то потом получит две зефирки. Дети оставались в комнате. Кто-то дожидался до конца эксперимента, но большинство сдавались на первой минуте. Ученые проследили судьбу детей в дальнейшем. Оказалось, что терпеливые дети в дальнейшем достигали в жизни больше остальных.
Если родители захотят воспитать ребенка так, чтобы он выбирал «лакомство потом», начинать стоит с первых лет жизни: с обычной чистки зубов, уборки игрушек, подарков или других поощрений. Настойчивость и терпение родителей помогут создать ребенку паттерн самоконтроля и не соблазняться сегодняшним зефиром. Правда, совсем недавно, чистоту этого эксперимента поставили под сомнение, так как оказалось, что есть большая зависимость между тем, в насколько богатой семье рос ребенок и его способностью противостоять соблазнам. И неудивительно, что дети из богатых семей в дальнейшем имели больше шансов добиться успеха, так как могли получить лучшее образование и иметь более влиятельные связи.
Как использовать паттерны для изучения других людей?
Наблюдая за паттерным поведением других людей, можно предугадывать их поступки. Простые примеры из жизни: если знакомый постоянно берет в долг и не отдает, то и вам он денег не вернет. Если подруга критикует всех подряд, то и о вас она плохо отзывается при посторонних. Об этой особенности психики знали наши предки. Не зря жениху советовали посмотреть на будущую тещу, чтобы узнать, какой будет жена.
Другой способ использования чужих шаблонов – провокация или манипуляция поведением другого человека. Многие способы известны нам с детства: взять жертву «на слабО», польстить или восхититься, спровоцировать конфликт или скандал, вызвать чувство вины или стыда. Зная поведенческие модели знакомого человека, можно получить от него нужную информацию или вынудить совершить желаемое действие. Знание собственных паттернов поможет распознать провокатора и выработать против них устойчивый иммунитет.
За шаблонами поведения покупателей внимательно следят маркетологи. Ведь знание поведенческих паттернов – это как разведка перед боем, дает 85% результата. Знание того, «как люди покупают», помогает маркетологам воздействовать на покупателей в дальнейшем. Это выкладка дорогого товара на уровне глаз, прикассовые стенды с игрушками, быстрое оформление заказа, доставка габаритных грузов.
Отслеживание паттернов.
Поведенческие паттерны – основа человека. Наш мозг устроен таким образом, что повторенные несколько раз действия, автоматически переходят в разряд неосознаваемых. С одной стороны, доведенные до автоматизма шаблоны поведения, экономят энергию. С другой – мешают действовать осознанно, гибко переключаться в разных ситуациях, реализовать себя как личность. Негативные шаблоны поведения приводят к стрессам, тревожности, неврозам и физическим болезням:
- Привычка листать соцсети перед сном приводит к недосыпу, а привычка есть на ходу, пропускать завтрак и обед – к скачкам уровня сахара в крови, тремору, головокружению.
- Привычка обобщать все события «Мне не повезло сегодня, значит я неудачник» провоцирует плохое настроение, депрессию.
- Привычка грубить оппоненту приводит к проблемам на работе и в личной жизни.
Изменить их сложно, избавиться еще сложнее. Меняя шаблоны поведения, можно скопировать паттерны успешных людей и добиться успеха. Но изменить модель не так просто. Некоторые шаблоны поведения становятся продолжением нашей личности и нас самих.
Выводы:
- Психологические паттерны – застывшие схемы действий, имеющиеся в нашем жизненном опыте.
- Формирование психологических шаблонов запускается в детстве и в раннем возрасте их можно корректировать.
- Наши шаблоны поведения оберегают и ограничивают одновременно.
- Убрать негативные паттерны сложно, проще заменить их позитивными.
Пройти тест на эмоциональный интеллект EQ
Что такое поведенческие паттерны и какими они бывают – Конструктор Успеха
Что такое паттерн? В психологии паттерн в широком смысле слова — это определенный шаблон, модель действий или реакций, которая используется человеком. В узком значении слова паттерн может означать:
- Набор определенных фраз, используемых в гипнозе для введения пациента в состояние транса.
- Набор повторяющихся действий, которые приводят к определенному результату в НЛП.
- Стереотип мышления или поведения.
Паттерны используются индивидом как осознанно, так и неосознанно. Человек не в состоянии контролировать свои действия и реакции ежесекундно. Если бы ему приходилось постоянно задумываться над каждым словом и движением, сознание быстро бы «устало» от таких объемов работы. Это происходит благодаря рациональному подходу: проще выхватить готовую модель поведения, уже использовавшийся ранее блок, чем заново придумывать «ответ» в определенной ситуации.
Паттерн в психологии
Человек использует паттерны в каждой сфере своей жизни, поэтому это явление распространенное. Встречаются паттерны мышления, реакций, действий, эмоций, речи и даже культурные шаблоны. Чтобы было более понятно, рассмотрим пару простых примеров:
- Утром по дороге на работу вы встречаете соседку по лестничной площадке. Хотя вы витаете далеко в облаках, на ее приветствие машинально вежливо отвечаете «Доброе утро». Ваше приветствие «на автомате» — это социальный паттерн поведения.
- Вы просыпаетесь после бессонной ночи в обнимку с книжкой, с большим трудом открываете глаза, уныло плететесь в ванную комнату, открываете кран, берете зубную щетку, начинаете чистить зубы. Ваше сознание начинает просыпаться только в тот момент, когда вы уже прополоскали рот. Вы совершали весь этот утренний ритуал неосознанно. Это еще один положительный паттерн поведения. О них мы поговорим более подробно дальше.
- Культурные паттерны — это особенности, которые характерны для конкретной социальной группы (народа, племени). Совокупность ценностей, верований, которые отличают эту народность от всех остальных. К примеру, при виде рыжей лисицы на картинке книжки сказок, русский ребенок испугается или насторожится, потому что лиса в нашей культуре — символ хитрости и изворотливости. Японский ребенок, увидев серебристую лисицу, да еще с девятью хвостами, улыбнется. Почему? Потому что в Стране восходящего солнца лисица олицетворяет мудрость. По мере взросления кэцуне седеет и обзаводится дополнительными хвостами.
- Яркий речевой паттерн в русском языке — это слова-паразиты. К примеру, многие привыкли заполнять паузы многозначительным «эээ» или протяжным «нуууу». Если не знаете что сказать, тогда мычите (простейший речевой паттерн).
В психологии паттерн считается составной единицей бессознательного. Некоторые сравнивают его с привычкой, что недалеко от истины. С точки зрения физиологии паттерны возникают по такой же схеме, что и рефлексы или инстинкты, но с точки зрения психологии это явление более «объемное».
Паттерны в примерах
Большой интерес представляет механизм работы паттерна. Чтобы «запустить» шаблон, достаточно затронуть какую-либо из его составных частей, то есть он активируется сразу же после активации отдельного элемента этой модели. Вспомним соседку по лестничной площадке, о которой упоминалось выше. Чтобы поздороваться, вам не обязательно услышать ее приветствие. Вы машинально пожелаете ей доброго утра, даже если заметите краем глаза во дворе.
Психологические шаблоны — это не набор бессмысленных «ритуальных» действий и реакций. Они, наоборот, наполнены смыслом, но сознание «освободилось» от этой информации, которая при регулярном повторении становится лишней. При этом информация сохраняется, но в ней нет необходимости, раз сознание уже вывело правильную поведенческую схему, то есть паттерн — это результат накопленных знаний и опыта.
Поведенческая схема может измениться только в том случае, если произойдут изменения в условиях, при которых обычно применялся паттерн. Чтобы смысл сказанного был более понятен, приведем еще два примера:
- После прихода домой, вы снимаете верхнюю одежду и обувь, идете к раковине и моете руки. Мытье рук после улицы — это паттерн здорового человека.
- Вы сидите дома и каждые две-три минуты посещаете ванную, чтобы помыть руки. Все потому, что вам кажется, что на них кишмя кишат бактерии и микробы, как в рекламе одного известного чистящего средства. Хотя ваши действия повторяются с завидной регулярностью — это не паттерн.
Не все повторяющиеся действия — это паттерн, но паттерн — это всегда шаблон.
Паттерны поведения
Поведенческие паттерны — это модели реакций, которые сохраняются в сознании каждого человека. Оно вешает ярлык «шаблон» на набор действий после того, как эта модель хорошо себя зарекомендовала и «выручила» в конкретном случае. При ее повторении, сознание вытащит из шкафа с паттернами нужный шаблон, снимет его с вешалки и «подсунет» человеку, как «тренд» этой ситуации.
Чем чаще паттерн используется, тем меньше человек задумывается над моделью действий. Он просто машинально ее совершает, будучи при этом мысленно занят совершенно другими вещами. Паттернов намного больше, чем может себе представить среднестатистический человек. Их классификация очень разветвленная:
- Индивидуальные и социальные. Первые — это привычки человека и личные модели поведения, которые свойственны только для конкретного индивида. Социальные паттерны можно назвать совокупностью культурного развития и воспитания. Эти навыки помогают выживать человеку в обществе. Выживать конечно громко сказано, но уж не прослыть диким невеждой эти шаблоны точно помогут. К социальным паттернам можно отнести привычку здороваться, пожимать руки при встрече, пропускать женщину вперед, открывать двери для выходящих из здания. Социальные паттерны еще можно назвать вежливостью и умением вести себя в обществе.
- Позитивные и негативные. Здесь все очень просто. Позитивные паттерны облегчают жизнь человека. К примеру, чистить зубы по утрам — это позитивный паттерн, а тянуть свои ручонки к пачке сигарет — негативный. Негативные паттерны отравляют жизнь человека. Многие из них по степени негативного влияния больше походят на неврозы, поэтому лечатся только при участии психотерапевта.
- Врожденные и приобретенные. Врожденные паттерны — это результат накопления знаний предков на генетическом уровне. К примеру, реакция на перелом ноги — крик. Это врожденный паттерн. Приобретенные шаблоны поведения — это результат накопленного опыта отдельного индивида. Их во многом определяет окружающая среда, воспитание, круг общения.
Паттерны поведения начинают формироваться еще в раннем детстве. Маленький ребенок похож на губку. Он жадно впитывает информацию. Если данные не отфильтруют родители или воспитатели, то малыш может подхватить много ненужного мусора и выработать в сознании неправильные паттерны, которые впоследствии станут негативными.
Следить за формированием моделей поведения у ребенка необходимо, потому что искоренить неправильные шаблоны проще всего именно в раннем возрасте, когда детская психика еще сохраняет гибкость. К примеру, можно приучить ребенка к самодисциплине, используя простой метод: сначала полезное действие, а потом приятная награда (убери игрушки в ящик, а потом возьми конфету). Этот способ поможет приучить ребенка сохранять порядок и справляться с соблазнами.
Некоторые люди могут использовать свои знания о паттернах для манипулирования другими (конечно, в корыстных целях). Шаблоны могут сыграть с вами злую шутку, если найдется человек, который изучит их достаточно хорошо и научится предугадывать, какую модель поведения предложит ваше сознание в той или иной ситуации.
Если вы хотите изучить шаблоны поведения более глубоко, то рекомендуем к прочтению книгу Эрика Берна «Люди, которые играют в игры. Игры, в которые играют люди». В этом издании простым и доступным языком, без переизбытка заумной терминологии автор излагает теорию шаблонов, по полочкам раскладывает паттерны и их влияние на жизнь человека.
Книгу можно смело назвать практическим пособием по психологии для «чайников». Труд американского психиатра помогает посмотреть на мир (и на самого себя) иначе и действительно раскрывает глаза на многие вещи, которые раньше ускользали из поля зрения.
Как распознать и изменить токсичные модели поведения
Модели обычно связаны с повторяющимися действиями, задачами или поведением, которые выполняются часто, часто не задумываясь. Большая часть повседневного поведения происходит на автомате, это действие повторяется столько раз, что кажется комфортным и не несет в себе никакого вреда. Или это поведение, которое мы не хотим менять из-за связанной с ним награды. Токсичные поведенческие паттерны также часто являются автоматическими, не обязательно кажутся вредными по своей сути, и они, скорее всего, сохранятся из-за связанного с ними вознаграждения.
Некоторые паттерны вызывали проблемы в прошлом, а в настоящее время усугубляют проблемы дома, на работе или в других местах, однако их может быть трудно распознать и изменить. И необходимо уметь распознавать токсичные модели поведения, прежде чем решать, как их остановить и изменить.
Даже когда мы признаем токсичное поведение, мы все равно не хотим меняться. Мы можем хотеть измениться, но по-прежнему бояться этого. Преодоление страха перед неизвестным может стать непреодолимым препятствием. Услышав от других, что перемены — это хорошо, и их следует принять, мало что помогает смягчить такой страх. Правда в том, что преодоление страха — это исключительно личный процесс
Тем не менее, прислушиваясь к рекомендациям других о том, что сработало для них, может быть очень полезно для мотивации тех, кто сопротивляется изменениям, приступить к такому самосовершенствованию. Действительно, иногда только услышав такого рода ободрение, можно начать истинное изменение.
Таким образом, распознавание токсичных поведенческих паттернов — это первый шаг, который нужно сделать, прежде чем что-либо с ними делать. После распознавания закономерностей легче принимать обоснованные решения о том, что делать в будущем.
Что представляет собой шаблон?
Как узнать, является ли какое-то личное действие частью общей модели поведения? Это включает в себя отстранение, отступление и наблюдение за поведением глазами других. Есть также вид отстраненности, который приходит со временем. Когда с момента последнего поведенческого инцидента прошли месяцы или годы, легче увидеть, где и как такое поведение превратилось в токсический паттерн.
Хотя упражнение в отстранении сложно, существуют более простые способы научиться различать закономерности.
Это привычка или закономерность? Несколько примеров могут оказаться полезными. Если вы делаете что-то каждый день автоматически, это, вероятно, привычка. Это может включать в себя чашку горячего кофе после пробуждения или латте во время обеда или перерыва.
Конечно, прошлые привычки — это вещи, о которых вы очень хорошо знаете, например, привычка к наркотикам и алкоголю, которая переросла в злоупотребление психоактивными веществами и, возможно, в зависимость или расстройство, связанное с употреблением алкоголя. Это не было разовым действием. Это было все время, и привычка завладела вашей жизнью до такой степени, что вы почувствовали, что не можете существовать без нее. Или вы можете быть почти алкоголиком и хотите изменить это токсичное поведение.
Например, когда кто-то сходит с алкогольного или наркотического опьянения, его привычка к употреблению требовала определенной модели поведения, когда ему нужно было снова искать наркотик по своему выбору. Затем узор закрепился. Человек делал это, потому что должен был, потому что не было другого способа удовлетворить свою непрекращающуюся потребность и желание употребления.
Суть в том, что паттерн — это поведение, к которому мы возвращаемся раз за разом, и которое мы делаем, не обязательно думая о нем. Когда дело доходит до распознавания закономерностей, важно выяснить, как устранить те, которые приводят к негативным последствиям, и принять те, которые приносят пользу для благополучия.
Хорошие новости, плохие новости
Вас может шокировать осознание того, что то, что вы считали хорошим для себя, на самом деле является прямо противоположным. В этом признании есть хорошие и плохие новости. С одной стороны, вы знаете, что то, что вы считали хорошим, возможно, было чем-то, во что вы заставили себя поверить. Возможно, вы думали, что это будет хорошо для вас, потому что это было хорошо для кого-то другого, и вы приняли такое поведение в надежде, что добьетесь такого же успеха.
Слепая приверженность любой идее никогда не бывает мудрой. Чтобы определить, подходит ли вам тот или иной образец поведения, требуется предварительное тщательное обдумывание и последующий тщательный анализ.
С чего начать
Подумайте о том, чтобы составить список текущих моделей поведения, составляющих шаблон. Это помогает делать заметки, чтобы использовать их позже в качестве справочной информации.
Сделайте два отдельных листа, по одному для хороших и плохих моделей поведения. Или просто перечислите модели поведения и посмотрите, соответствуют ли они шаблонам. Затем присвойте им положительное или отрицательное значение.
Это значение не означает, нравится вам поведение или нет. Тебе нравилось кайфовать, верно? Это не означало, что это была положительная модель поведения. Нет, здесь положительное или отрицательное значение относится к тому, улучшает оно или ухудшает вашу жизнь.
Пример модели токсичного поведения — слишком много брать на себя работу. Хотя, безусловно, нет ничего плохого в желании позаботиться о своей семье и своих обязанностях, когда вы обнаруживаете, что постоянно берете на себя новые задания, требуете большей ответственности на работе и пренебрегаете другими аспектами своей жизни, это красный флаг, который должен сигнализировать о проблемах. предстоящий.
Возможно, раньше вы не были трудоголиком, но такая модель поведения является симптомом трудоголика. Когда все ваше время занято работой и связанными с ней задачами, времени на что-либо еще остается мало. В результате повышается уровень стресса, нарастает напряжение и снижается продуктивность. Работа усерднее и дольше приносит меньше удовлетворения.
К кому обратиться
Когда у вас есть список шаблонов, особенно тех, которые вы хотите изменить, что вы должны с ним делать? К кому лучше всего обратиться за помощью, чтобы разобраться во всем этом?
Есть несколько советов, каждый из которых может подойти для вашей ситуации.
- Ваш супруг или близкие – Ваш супруг и/или близкие и члены семьи являются логичным первым выбором здесь. Это люди, которые знают и заботятся о вас больше всего. Они должны максимально поддерживать ваши усилия и могут быть тесно связаны с некоторыми моделями поведения, которые вы хотите изменить.
- Ваш терапевт – Обязательно воспользуйтесь возможностью обсудить с вашим консультантом или терапевтом виды поведения, которые вы хотите изменить. Как объективный профессионал, терапевт может лучше указать на наблюдения по поводу конкретных видов поведения, о которых вы, возможно, не подумали, или провести параллели с другими ранее обсуждавшимися формами поведения. Консультация также является конфиденциальной, что должно рассеять опасения.
- Ваш начальник. В некоторых случаях изменение модели поведения потребует от вас определенных обсуждений с вашим начальником или руководителем на работе. Очевидно, вам нужно очень тщательно подумать о том, как вы подходите к этому человеку, включая то, что, когда и где вы планируете такое обсуждение. Имейте в виду, что ваш работодатель хочет, чтобы вы были настолько продуктивны, насколько это возможно, поскольку это бизнес, а бизнес требует производительности, чтобы быть успешным. Обсуждайте в своем обсуждении, как вы оба можете удовлетворить свои потребности и что вы можете сделать, чтобы помочь.
Столкнувшись с сопротивлением
Что делать, если вы не можете продвинуться вперед из-за сопротивления? С некоторыми токсичными поведенческими моделями невозможно справиться за одну ночь. Хотя признание того, что необходимо изменить, имеет решающее значение, до выполнения работы, чтобы гарантировать, что изменения произойдут, еще далеко.
Проявите терпение. Будьте готовы выполнять работу и не разочаровываться и не расстраиваться, когда что-то не решается сразу. Жизнь может стать грязной, сложной и трудной для понимания. Это еще одно преимущество наличия сильной сети поддержки, когда есть люди, к которым можно обратиться в трудную минуту.
Также важно понимать внутреннее нежелание меняться.
Празднование успеха
Также невероятно ценно отмечать небольшие успехи после внесения важных изменений.
Признайте, что не каждое изменение будет ошеломляющим. Это не обязательно для того, чтобы квалифицироваться как успех. Если это важно для вас, это важно для вашего благополучия.
Признайте свои достижения. Отдайте себе должное за то, что вы сделали, а затем посмотрите на следующий пункт в списке и вернитесь к работе. Успех строится на успехе. С импульсом легче продолжать двигаться вперед.
Цепочка ответственности
/ Шаблоны проектирования / Поведенческие модели
Также известен как: CoR, Chain of Command
НамерениеЦепочка ответственности — это поведенческий шаблон проектирования, позволяющий передавать запросы по цепочке обработчиков. Получив запрос, каждый обработчик решает либо обработать запрос, либо передать его следующему обработчику в цепочке.
ПроблемаПредставьте, что вы работаете над системой онлайн-заказов. Вы хотите ограничить доступ к системе, чтобы только авторизованные пользователи могли создавать заказы. Кроме того, пользователи с правами администратора должны иметь полный доступ ко всем заказам.
После небольшого планирования вы поняли, что эти проверки должны выполняться последовательно. Приложение может попытаться аутентифицировать пользователя в системе всякий раз, когда оно получает запрос, содержащий учетные данные пользователя. Однако, если эти учетные данные неверны и аутентификация не удалась, нет причин продолжать какие-либо другие проверки.
Запрос должен пройти ряд проверок, прежде чем система заказов сможет его обработать.
В течение следующих нескольких месяцев вы реализовали еще несколько таких последовательных проверок.
Один из ваших коллег предположил, что передавать необработанные данные прямо в систему заказов небезопасно. Итак, вы добавили дополнительный шаг проверки для очистки данных в запросе.
Позже кто-то заметил, что система уязвима для взлома паролей методом грубой силы. Чтобы предотвратить это, вы быстро добавили проверку, которая отфильтровывает повторяющиеся неудачные запросы, поступающие с одного и того же IP-адреса.
Кто-то еще предложил ускорить работу системы, возвращая кэшированные результаты при повторных запросах, содержащих одни и те же данные. Следовательно, вы добавили еще одну проверку, которая пропускает запрос в систему, только если нет подходящего кэшированного ответа.
Чем больше код рос, тем запутаннее он становился.
Код чеков, и без того выглядевший кашей, становился все более и более раздутым по мере добавления каждой новой функции. Изменение одного чека иногда влияло на другие. Хуже всего то, что когда вы пытались повторно использовать проверки для защиты других компонентов системы, вам приходилось дублировать часть кода, поскольку эти компоненты требовали некоторых проверок, но не всех.
Система стала очень сложной для понимания и дорогой в обслуживании. Вы какое-то время боролись с кодом, пока однажды не решили провести рефакторинг всего этого.
РешениеКак и многие другие поведенческие шаблоны проектирования, цепочка ответственности полагается на преобразование определенных поведений в автономные объекты, называемые обработчиками . В нашем случае каждая проверка должна быть извлечена в свой класс с помощью одного метода, выполняющего проверку. Запрос вместе со своими данными передается этому методу в качестве аргумента.
Шаблон предлагает связать эти обработчики в цепочку. Каждый связанный обработчик имеет поле для хранения ссылки на следующий обработчик в цепочке. Помимо обработки запроса, обработчики передают запрос дальше по цепочке. Запрос перемещается по цепочке до тех пор, пока все обработчики не получат возможность его обработать.
Вот лучшая часть: обработчик может принять решение не передавать запрос дальше по цепочке и эффективно остановить дальнейшую обработку.
В нашем примере с системами заказов обработчик выполняет обработку, а затем решает, передать ли запрос дальше по цепочке. Предполагая, что запрос содержит правильные данные, все обработчики могут выполнять свое основное поведение, будь то проверка подлинности или кэширование.
Обработчики выстраиваются один за другим, образуя цепочку.
Однако есть немного другой подход (и он немного более каноничный), при котором, получив запрос, обработчик решает, может ли он его обработать. Если это возможно, он не передает запрос дальше. Таким образом, либо только один обработчик обрабатывает запрос, либо вообще ничего. Этот подход очень распространен при работе с событиями в стеках элементов в графическом пользовательском интерфейсе.
Например, когда пользователь нажимает кнопку, событие распространяется по цепочке элементов графического интерфейса, которая начинается с кнопки, проходит по ее контейнерам (таким как формы или панели) и заканчивается главным окном приложения. Событие обрабатывается первым элементом в цепочке, способным его обработать. Этот пример также примечателен тем, что он показывает, что цепочку всегда можно извлечь из дерева объектов.
Цепочка может быть сформирована из ветви дерева объектов.
Крайне важно, чтобы все классы обработчиков реализовывали один и тот же интерфейс. Каждый конкретный обработчик должен заботиться только о следующем, имеющем метод execute
. Таким образом, вы можете создавать цепочки во время выполнения, используя различные обработчики, не связывая свой код с их конкретными классами.
Звонок в службу технической поддержки может проходить через нескольких операторов.
Вы только что купили и установили на свой компьютер новое оборудование. Поскольку вы гик, на компьютере установлено несколько операционных систем. Вы пытаетесь загрузить их все, чтобы увидеть, поддерживается ли оборудование. Windows автоматически обнаруживает и включает оборудование. Однако ваш любимый Linux отказывается работать с новым железом. С небольшим проблеском надежды вы решаете позвонить по телефону техподдержки, указанному на коробке.
Первое, что вы слышите, это механический голос автоответчика. Он предлагает девять популярных решений различных проблем, ни одно из которых не имеет отношения к вашему делу. Через некоторое время робот подключает вас к живому оператору.
Увы, ничего конкретного оператор подсказать тоже не может. Он продолжает цитировать длинные выдержки из руководства, отказываясь слушать ваши комментарии. Услышав фразу «вы пробовали выключить и снова включить компьютер?» в 10-й раз вы требуете, чтобы вас соединили с настоящим инженером.
В конце концов, оператор передает ваш звонок одному из инженеров, который, вероятно, часами жаждал живого человеческого общения, сидя в своей одинокой серверной в темном подвале какого-то офисного здания. Инженер расскажет вам, где скачать подходящие драйверы для вашего нового оборудования и как установить их в Linux. Наконец-то решение! Вы заканчиваете разговор, разрываясь от радости.
СтруктураОбработчик объявляет интерфейс, общий для всех конкретных обработчиков. Обычно он содержит только один метод для обработки запросов, но иногда может иметь и другой метод для установки следующего обработчика в цепочке.
Базовый обработчик — это необязательный класс, в который можно поместить шаблонный код, общий для всех классов обработчиков.
Обычно этот класс определяет поле для хранения ссылки на следующий обработчик. Клиенты могут построить цепочку, передав обработчик конструктору или сеттеру предыдущего обработчика. Класс также может реализовать поведение обработки по умолчанию: он может передать выполнение следующему обработчику после проверки его существования.
Concrete Handlers содержат фактический код для обработки запросов. При получении запроса каждый обработчик должен решить, обрабатывать ли его и, дополнительно, передавать ли по цепочке.
Обработчики обычно автономны и неизменяемы, принимая все необходимые данные только один раз через конструктор.
Клиент может составлять цепочки только один раз или составлять их динамически, в зависимости от логики приложения. Обратите внимание, что запрос может быть отправлен любому обработчику в цепочке — он не обязательно должен быть первым.
В этом примере шаблон Цепочка ответственности отвечает за отображение контекстной справочной информации для активных элементов графического интерфейса.
Классы 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. В этом случае, когда листовой компонент получает запрос, он может передать его по цепочке всех родительских компонентов до корня дерева объектов.
Обработчики в цепочке ответственности могут быть реализованы как команды. В этом случае вы можете выполнять множество различных операций над одним и тем же объектом контекста, представленным запросом.
Однако есть и другой подход, когда сам запрос представляет собой Команда объект. В этом случае вы можете выполнять одну и ту же операцию в ряде различных контекстов, связанных в цепочку.