Шаблон проектирования, или паттерн, - повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.
Шаблоны проектирования приобрели широкую популярность в связи с тем, что к моменту их появления, программирование уже было довольно сильно развито. Разработчики начали понимать, что нет необходимости изобретать велосипед, когда уже кто-то до тебя сталкивался с такой же определенного рода проблемой.
Выделяют три основных типа шаблона проектирования: порождающий, структурный и поведенческий.
Порождающий шаблон проектирования позволяет сделать систему независимой от способа создания, композиции и представления объектов, то есть этот шаблон создает объект или их группу. К порождающим шаблонам относят: абстрактная фабрика, строитель, прототип, одиночка и другие.
Одним из самых известных из порождающих шаблонов является абстрактная фабрика. Он позволяет разработчику создавать интерфейс для объектов, которые связаны как-либо между собой. При этом нет необходимости указывать конкретные классы, так как работа с каждым из них производится через интерфейс. С помощью такой фабрики создаются группы объектов, реализующие одно поведение. К преимуществам абстрактной фабрики можно причислить то, что она изолирует конкретный класс, благодаря чему легко заменять семейства продуктов. Недостатком можно считать то, что при расширении возможностей фабрики путем добавления нового типа продуктов, придется изменять все конкретные реализации шаблона, а это бывает очень сложно на практике, если создано большое количество фабрик.
Структурные паттерны рассматривают образование более крупных структур из объектов и классов. Шаблоны уровня класса полезны в тех случаях, когда необходимо объединить процессы нескольких библиотек. При этом затрагиваются такие механизмы, как:
- наследование (определение реализации подклассами, а интерфейса - базовым классом);
- композиция, при которой структуры образуются через объединение нескольких объектов.
К структурным шаблонам относятся: адаптер, мост, компоновщик и другие. Рассмотрит такой структурный шаблон проектирования, как адаптер. Он предназначен для преобразования интерфейса одного класса в интерфейс другого. Благодаря реализации данного паттерна мы можем использовать вместе классы с несовместимыми интерфейсами. Адаптер используют, когда необходимо использовать имеющийся класс, но его интерфейс не соответствует потребностям, или уже существует класс совместно с другими классами, интерфейсы которых несовместимы.
Участники:
То есть клиент ничего не знает об adaptee, он знает и использует только объекты target. И благодаря адаптеру мы можем использовать объекты adaptee как target.
Поведенческие шаблоны связаны с распределением обязанностей между объектами. Их отличие от структурных шаблонов заключается в том, что только описывают структуру, но также описывают шаблоны для их взаимодействия. К поведенческим шаблонам относят: цепочка обязанностей, итератор, наблюдатель и другие.
Паттерн Наблюдатель представляет собой поведенческий шаблон проектирования, который использует отношение «один ко многим». В этом отношении есть один наблюдаемый объект и множество наблюдателей. И при изменении наблюдаемого объекта автоматически происходит оповещение всех наблюдателей.
Данный паттерн еще называют издатель-подписчик, поскольку их взаимоотношения схожи с сутью данного шаблона. Подписчик подписывается на издательскую рассылку, а издатель уведомляет всех подписчиков об изменениях. Наблюдатель используют, когда система состоит из множества классов, объекты которых должны находиться в согласованных состояниях; общая схема взаимодействия объектов предполагает две стороны: одна рассылает сообщения и является главной, другая получает сообщения и реагирует на них, т.е. отделение логики обеих сторон позволяет рассматривать их рассматривать независимо друг от друга; существует один объект, рассылающий сообщения и множество подписчиков, которые получают
сообщения, при это точное число подписчиков заранее неизвестно и в процессе работы может меняться.
Участники:
При этом наблюдаемому объекту не надо ничего знать о наблюдателе кроме того, что тот реализует метод Update(). С помощью отношения агрегации реализуется слабосвязанность обоих компонентов. Изменения в наблюдаемом объекте не влияют на наблюдателя и наоборот. В определенный момент наблюдатель может прекратить наблюдение. И после этого и наблюдатель, и наблюдаемый могут продолжать существовать в системе независимо друг от друга.
Выше были рассмотрены только по одному примеру из каждого типа шаблонов проектирования, однако, естественно, их существует больше.
Дата | Выполнено, % |
---|---|
2020-05-15 00:35:02 | 10 |
2020-05-14 21:34:59 | 100 |