Введение в шаблоны проектирования
Шаблоны проектирования представляют собой лучшие практики, обычно применяемые опытными разработчиками объектно-ориентированного программного обеспечения. Шаблоны проектирования — это решения общих проблем, с которыми разработчики программного обеспечения сталкиваются в процессе разработки программного обеспечения. Эти решения были обобщены многими разработчиками программного обеспечения методом проб и ошибок за значительный период времени.
Шаблоны проектирования — это набор многократно используемых, широко известных, классифицированных и каталогизированных обобщений опыта проектирования кода. Цель использования шаблонов проектирования — повторно использовать код, сделать код более понятным для других и обеспечить надёжность кода. Несомненно, шаблоны проектирования выгодны и для себя, и для других, и для системы. Шаблоны проектирования делают написание кода по-настоящему инженерным, и шаблоны проектирования — это краеугольный камень программной инженерии, подобно кирпичам и камням здания. Разумное использование шаблонов проектирования в проектах позволяет отлично решить множество проблем. Каждому шаблону соответствует определённый принцип в реальности. Каждый шаблон описывает проблему, которая постоянно возникает вокруг нас, а также основное решение этой проблемы. Это также причина, по которой шаблоны проектирования могут широко применяться.
Что такое GOF (полное название: Банда четырёх)?
В 1994 году Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес вчетвером написали и издали книгу под названиемDesign Patterns - Elements of Reusable Object-Oriented Software (китайское название: Шаблоны проектирования — многократно используемые элементы объектно-ориентированного программного обеспечения)Эта книга, в которой впервые было упомянуто понятие шаблонов проектирования в разработке программного обеспечения.
Банда четырёхGOF (полная расшифровка: Банда четырёх)Предложенные ими шаблоны проектирования в основном основаны на следующих принципах объектно-ориентированного проектирования.
- Программируйте на уровне интерфейса, а не реализации.
- Отдавайте предпочтение композиции объектов перед наследованием.
Использование шаблонов проектирования
Два основных применения шаблонов проектирования в разработке программного обеспечения.
Общая платформа для разработчиков
Шаблоны проектирования обеспечивают стандартную терминологическую систему, специфичную для конкретных сценариев. Например, шаблон проектирования «Одиночка» означает использование единственного объекта, так что все разработчики, знакомые с шаблоном «Одиночка», могут использовать единственный объект и таким образом сообщать другим, что программа использует шаблон «Одиночка».
Лучшая практика
Шаблоны проектирования прошли длительный период развития и предоставляют лучшие решения общих проблем, возникающих в процессе разработки программного обеспечения. Изучение этих шаблонов помогает менее опытным разработчикам освоить проектирование программного обеспечения простым и быстрым способом.
Типы шаблонов проектирования
Согласно справочной книге по шаблонам проектированияDesign Patterns - Elements of Reusable Object-Oriented Software(китайский перевод. Первое название: Design Patterns - Reusable of Object-Oriented Software element)Как упоминалось, всего существует 23 шаблона проектирования. Эти шаблоны можно разделить на три основные категории: порождающие шаблоны, структурные шаблоны и поведенческие шаблоны. Конечно, мы также обсудим ещё одну категорию шаблонов проектирования: шаблоны J2EE.
| Порядковый номер | Шаблоны & описания | включая |
|---|---|---|
| 1 | Порождающий шаблон Эти паттерны проектирования предоставляют способ скрыть логику создания при создании объектов, вместо использования оператора new для непосредственного создания экземпляров объектов. Это делает программу более гибкой при определении того, какие объекты должны быть созданы для данного экземпляра. |
|
| 2 | Структурный паттерн Эти паттерны сосредоточены на композиции и связях между объектами, стремясь решить, как строить гибкие и переиспользуемые структуры классов и объектов. |
|
| 3 | Поведенческий паттерн Эти паттерны сосредоточены на коммуникации и взаимодействии между объектами, стремясь решить задачу распределения обязанностей между объектами и инкапсуляции алгоритмов. |
|
| 4 | Паттерны J2EE Эти паттерны проектирования уделяют особое внимание уровню представления. Эти паттерны были выделены Sun Java Center. |
|
Ниже с помощью изображения описываются взаимосвязи между паттернами проектирования в целом:

Преимущества паттернов проектирования
- Обеспечивает общий словарь и концепции проектирования, позволяя разработчикам лучше общаться и понимать намерения друг друга в проектировании.
- Предоставляет проверенные решения, которые могут повысить сопровождаемость, повторное использование и гибкость программного обеспечения.
- Способствует повторному использованию кода, избегая дублирования проектирования и реализации.
- Следуя паттернам проектирования, можно уменьшить количество ошибок и проблем в системе, а также повысить качество кода.
Шесть принципов паттернов проектирования
1. Принцип открытости/закрытости
Принцип открытости/закрытости означает:Открыт для расширения, закрыт для измененияКогда программу нужно расширить, нельзя изменять исходный код, достигая эффекта горячей замены. Проще говоря, это делает программу легко расширяемой и удобной для сопровождения и обновления. Чтобы достичь этого эффекта, нам нужно использовать интерфейсы и абстрактные классы, о которых мы упомянем в последующем конкретном проектировании.
2. Принцип подстановки Лисков
Принцип подстановки Лисков — один из базовых принципов объектно-ориентированного проектирования. Принцип подстановки Лисков утверждает, что везде, где может появиться базовый класс, должен иметь возможность появиться и подкласс. LSP — это краеугольный камень наследования и повторного использования. Только когда производный класс может заменить базовый класс, не влияя на функциональность программного модуля, базовый класс может действительно повторно использоваться, а производный класс также может добавлять новое поведение на основе базового класса. Принцип подстановки Лисков является дополнением к принципу открытости/закрытости. Ключевой шаг в реализации принципа открытости/закрытости — абстракция, а отношение наследования между базовыми и производными классами — конкретная реализация абстракции. Поэтому принцип подстановки Лисков — это спецификация конкретных шагов по реализации абстракции.
3. Принцип инверсии зависимостей
Этот принцип является основой принципа открытости/закрытости. Конкретное содержание: программируйте для интерфейсов, зависьте от абстракций, а не от конкретных реализаций.
4. Принцип разделения интерфейсов (Interface Segregation Principle)
Смысл этого принципа таков: использование нескольких изолированных интерфейсов лучше, чем использование одного интерфейса. У него есть и другое значение: уменьшать связанность между классами. Из этого видно, что паттерны проектирования на самом деле являются идеями проектирования программного обеспечения, выведенными из крупномасштабной программной архитектуры, удобными для обновления и сопровождения, подчёркивающими уменьшение зависимостей и связанности.
5. Закон Деметры, также известный как принцип наименьшего знания (Demeter Principle)
Принцип наименьшего знания означает: сущность должна взаимодействовать с другими сущностями как можно меньше, чтобы функциональные модули системы были относительно независимыми.
6. Принцип композиционного повторного использования
Принцип композиционного повторного использования означает: старайтесь использовать композицию/агрегацию вместо наследования.
Другие расширения