Menu
Coddy logo textTech

Введение в паттерны проектирования

Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 89 из 110.

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

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

Паттерны проектирования обычно делятся на три категории:

КатегорияНазначениеПримеры
ПорождающиеКак создаются объектыSingleton, Factory
СтруктурныеКак компонуются объектыAdapter, Decorator
ПоведенческиеКак объекты взаимодействуютObserver, Strategy

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

challenge icon

Задание

Легко

Давайте создадим простую систему решения задач, которая демонстрирует, как паттерны проектирования организуют код по категориям! Вы создадите структуру, которая классифицирует различные программные задачи и предлагает, какой тип паттерна может помочь в их решении.

Вы организуете свой код в двух файлах:

  • patterns.dart: Создайте перечисление (enum) с названием PatternCategory с тремя значениями: creational, structural и behavioral. Каждое значение должно иметь поле String description, объясняющее его назначение:
    • creational: "Handles object creation"
    • structural: "Handles object composition"
    • behavioral: "Handles object communication"
    Также создайте класс с названием Problem, который представляет программную задачу. Он должен иметь поле String name и поле PatternCategory category. Включите метод suggest(), который возвращает строку в формате: [name] -> Use a [category description] pattern
  • main.dart: Импортируйте ваш файл с паттернами и продемонстрируйте, как различные задачи соотносятся с разными категориями паттернов. Создайте три экземпляра Problem:
    • Задача с именем Ensure single database connection и категорией creational
    • Задача с именем Make old API work with new system и категорией structural
    • Задача с именем Notify users when data changes и категорией behavioral
    Вызовите suggest() для каждой задачи и выведите результаты на печать.

Этот челлендж поможет вам увидеть, как паттерны проектирования классифицируются по типу задач, которые они решают — это ключевая концепция перед тем, как вы начнете изучать конкретные паттерны в следующих уроках!

Ожидаемый вывод:

Ensure single database connection -> Use a Handles object creation pattern
Make old API work with new system -> Use a Handles object composition pattern
Notify users when data changes -> Use a Handles object communication pattern

Шпаргалка

Паттерны проектирования — это проверенные решения распространенных проблем программирования. Они представляют собой шаблоны, которые определенным образом сочетают концепции ООП (классы, наследование, интерфейсы, полиморфизм).

Паттерны проектирования делятся на три категории:

КатегорияНазначениеПримеры
ПорождающиеСпособ создания объектовSingleton, Factory
СтруктурныеСпособ компоновки объектовAdapter, Decorator
ПоведенческиеСпособ взаимодействия объектовObserver, Strategy

Попробуйте сами

import 'patterns.dart';

void main() {
  // TODO: Создайте три экземпляра Problem:
  // 1. name: "Ensure single database connection", category: creational
  // 2. name: "Make old API work with new system", category: structural
  // 3. name: "Notify users when data changes", category: behavioral

  // TODO: Вызовите suggest() для каждой проблемы и выведите результаты
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование

14Паттерны проектирования. Часть 1

Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy