Menu
Coddy logo textTech

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

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

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

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

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

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

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

В следующих уроках вы реализуете несколько основных паттернов, начиная с Singleton, Factory, Observer и Strategy. Понимание этих паттернов поможет вам распознавать распространенные решения в существующих кодовых базах и принимать более обоснованные архитектурные решения в собственных проектах.

challenge icon

Задание

Легко

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

Вы создадите три файла для разделения различных зон ответственности:

  • Pattern.cs: Определите класс Pattern в пространстве имен Patterns, который представляет собой один паттерн проектирования. Каждый паттерн должен иметь свойства Name, Category (Creational, Structural или Behavioral) и Description. Включите метод GetSummary(), который возвращает отформатированную строку: [{Category}] {Name}: {Description}
  • PatternCatalog.cs: Создайте класс PatternCatalog в пространстве имен Patterns, который управляет коллекцией паттернов. Ваш каталог должен иметь возможность добавлять паттерны и содержать метод GetPatternsByCategory(string category), который возвращает список всех паттернов, соответствующих этой категории. Также включите метод GetAllSummaries(), который возвращает список строк с описанием всех паттернов в каталоге.
  • Program.cs: Объедините все вместе, создав каталог и заполнив его паттернами на основе входных данных. Затем отобразите паттерны, отфильтрованные по категории.

Вы получите следующие входные данные:

  • Количество паттернов для добавления
  • Для каждого паттерна: три строки, содержащие название (name), категорию (category) и описание (description)
  • Категория для фильтрации

После добавления всех паттернов в каталог выведите сводки паттернов, соответствующих категории фильтра, по одной в строке. Если подходящих паттернов не найдено, выведите No patterns found.

Например, если входные данные следующие:

3
Singleton
Creational
Ensures only one instance exists
Observer
Behavioral
Notifies dependents of state changes
Factory
Creational
Creates objects without specifying exact class
Creational

Вывод должен быть таким:

[Creational] Singleton: Ensures only one instance exists
[Creational] Factory: Creates objects without specifying exact class

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

Шпаргалка

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

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

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

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

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

using System;
using System.Collections.Generic;
using Patterns;

class Program
{
    public static void Main(string[] args)
    {
        // Прочитать количество паттернов
        int n = Convert.ToInt32(Console.ReadLine());
        
        // Создать новый PatternCatalog
        PatternCatalog catalog = new PatternCatalog();
        
        // TODO: Прочитать детали каждого паттерна (имя, категория, описание)
        // и добавить их в каталог
        for (int i = 0; i < n; i++)
        {
            string name = Console.ReadLine();
            string category = Console.ReadLine();
            string description = Console.ReadLine();
            
            // TODO: Создать Pattern и добавить его в каталог
        }
        
        // Прочитать категорию для фильтрации
        string filterCategory = Console.ReadLine();
        
        // TODO: Получить паттерны по категории фильтра
        // и вывести их краткое описание
        // Если паттерны не найдены, вывести "No patterns found"
    }
}
quiz iconПроверьте себя

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

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