Объяснение шаблонов проектирования программного обеспечения

Объяснение шаблонов проектирования программного обеспечения

5 апреля 2022 г.

Шаблоны проектирования — это многоразовые и эффективные решения распространенных проблем проектирования программного обеспечения.


Шаблоны проектирования открывают пути к решениям некоторых из наиболее распространенных головоломок объектно-ориентированного проектирования. Это решения, разработанные с течением времени путем проб и ошибок, которые хорошо задокументированы и могут быть применены к конкретным проблемам проектирования.


Шаблоны проектирования впервые были описаны в книге «Шаблоны проектирования: элементы многоразового объектно-ориентированного проектирования программного обеспечения». Эта книга была написана четырьмя программистами. И они представили 23 шаблона проектирования , эти шаблоны проектирования были разделены на 3 категории.


Творческий







Структурный









Поведение













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


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


Шаблон проектирования обычно выражается определением, диаграммой классов и собирается в каталог шаблонов.


Принципы проектирования и шаблоны проектирования. Являются ли они одинаковыми?


Нет,


  • Принципы проектирования (инкапсуляция, наследование и т. д.) и шаблоны проектирования различны. Принципы — это общие рекомендации, а шаблоны — это конкретные проектные решения, часто направленные на решение общих объектно-ориентированных задач. Шаблоны проектирования состоят из основ объектно-ориентированного подхода.*

Давайте обсудим несколько шаблонов проектирования


Шаблон стратегии


Шаблон стратегии определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Стратегия позволяет алгоритму изменяться независимо от клиентов, которые его используют. Это определение не говорит нам, как реализовать шаблон, но дает нам хорошее представление о назначении шаблона.


Согласно вики


«Шаблон стратегии (также известный как шаблон политики) — это поведенческий шаблон проектирования программного обеспечения, который позволяет выбирать алгоритм во время выполнения. Вместо того, чтобы напрямую реализовывать один алгоритм, код получает во время выполнения инструкции относительно того, какие семейство используемых алгоритмов».



wiki/Strategy_pattern


Например, класс, выполняющий проверку входящих данных, может использовать шаблон стратегии для выбора алгоритма проверки в зависимости от типа данных, источника данных, выбора пользователя или других отличительных факторов. Эти факторы неизвестны до момента выполнения и могут потребовать проведения совершенно другой проверки.


Эта идея использования композиции (HAS-A), а не наследования (IS-A), является еще одним важным принципом проектирования. Этот принцип гласит: если у вас есть выбор, используйте композицию, а не наследование, поскольку обычно композиция приводит к более гибкому дизайну.


Шаблон адаптера


Шаблон адаптера используется для преобразования интерфейса класса в другой интерфейс, ожидаемый клиентами. Адаптер позволяет классам работать вместе, что невозможно иначе из-за несовместимых интерфейсов. Таким образом, этот шаблон даст нам возможность заставить два класса работать вместе, когда у них есть несовместимые интерфейсы.



Адаптер находится между клиентом и адаптируемым и делегирует вызовы клиента адаптированному.


Преимущество шаблона адаптера заключается в том, что вы можете легко добавить адаптер, вообще не изменяя адаптируемого, а только модифицируя клиент для добавления адаптера. Допустим, у вас есть класс поставщика, который вы не можете изменить, и он использует другой интерфейс, чем вы ожидаете, но вам нужно заставить класс поставщика работать с вашей системой. Что ж, шаблон адаптера упрощает эту задачу.


Шаблон наблюдателя


Шаблон Observer Design — это, по сути, отношения между издателем и подписчиком. Любой объект может отправить запрос на подписку на объект издателя. Когда запрос получен издателем, запрашивающий объект немедленно становится подписчиком.


Шаблон наблюдателя определяет зависимость между объектами по принципу «один ко многим», так что при изменении состояния одного объекта все его зависимые объекты получают уведомление и автоматически обновляются.



Наблюдатели могут добавлять себя в список в любое время, они также могут удалить себя или даже быть заменены другим наблюдателем в любое время. Субъекту просто все равно. Все, что он делает, это поддерживает список и уведомляет объекты в этом списке по мере необходимости.



Принцип открытого-закрытого проектирования гласит, что классы/коды должны быть открыты для расширения, но закрыты для модификации.


Этот принцип и композиция открывают путь к другому дизайну, давайте его обсудим.


Шаблон декоратора


Шаблон декоратора динамически возлагает на объект дополнительные обязанности.



Декораторы представляют собой гибкую альтернативу подклассам для расширения функциональности.


Шаблон итератора


У нас есть много способов хранить коллекции объектов в структурах данных. Например, большинство современных языков программирования предоставляют массивы. Если вы используете Java, вы можете хранить пункты меню для меню в массиве.


Большинство языков предоставляют дополнительные структуры для хранения коллекций объектов, таких как списки, словари и наборы. Например, Java предоставляет ArrayList, который очень похож на массив, но также имеет некоторые возможности, подобные спискам. Здесь мы сохраняем наши пункты меню в ArrayList. Достаточно просто, но что, если нам нужно написать код, работающий с несколькими из этих типов коллекций?


Есть ли способ избежать переписывания кода итерации, если мы изменим тип нашей коллекции?


Шаблон итератора предоставляет способ последовательного доступа к элементам агрегатного объекта без раскрытия его базового представления.


Проще говоря, Шаблон итератора позволяет вам реализовать логику итерации в итераторе, и этот итератор может использоваться различными коллекциями(массив, список массивов и т. д.).



Фабричные шаблоны


Factory позволяет нам отделить процесс создания объектов от клиентов, использующих эти объекты.


Этот шаблон определяет интерфейс для создания объекта, но позволяет подклассам решать, какие классы создавать экземпляры.



Фабричный шаблон включает в себя детали реализации и базовую реализацию можно изменить без какого-либо влияния на основную реализацию.


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


В этой статье я поделился некоторыми основными понятиями о шаблонах проектирования и о том, как они работают в целом. В следующих статьях мы подробно обсудим их. Есть очень важная вещь, которую я хочу сказать вам в конце:


Вам не нужно использовать шаблоны проектирования там, где они не нужны. Старайтесь, чтобы решение было как можно более простым. * Здесь ключевое значение имеет простота. Добавление шаблонов проектирования в места, где они не нужны, может увеличить сложность и сделать вашу систему неэффективной.*


Я надеюсь, что эта статья помогла вам узнать о нескольких шаблонах проектирования, их преимуществах и недостатках.


Также опубликовано здесь


https://ruchika-mourya.medium.com/software-design-patterns-4f16b2b43f20



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE