Menu
Coddy logo textTech

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

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

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

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

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

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

Зачем изучать паттерны проектирования? Они дают вам общий словарь с другими разработчиками — фраза «используй здесь Factory» мгновенно передает сложную идею. Они также помогают писать более гибкий и поддерживаемый код, применяя такие принципы, как «программируйте на уровне интерфейса, а не реализации».

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

challenge icon

Задание

Легко

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

Вам нужно создать три файла:

  • Pattern.java: Создайте интерфейс с именем Pattern, который определяет контракт для всех паттернов проектирования. Ваш интерфейс должен объявлять два метода: String getCategory(), который возвращает категорию паттерна (Creational, Structural или Behavioral), и String getPurpose(), который возвращает описание того, что делает эта категория паттернов.
  • PatternInfo.java: Создайте три класса, реализующих ваш интерфейс Pattern, каждый из которых представляет одну категорию паттернов проектирования:

    CreationalPattern — должен возвращать "Creational" для категории и "How objects are created" для цели.

    StructuralPattern — должен возвращать "Structural" для категории и "How objects are composed" для цели.

    BehavioralPattern — должен возвращать "Behavioral" для категории и "How objects communicate" для цели.

  • Main.java: Соберите ваш классификатор паттернов воедино! Вы получите один входной параметр: имя паттерна (String), которое будет одним из следующих: "Singleton", "Factory", "Adapter", "Decorator", "Observer" или "Strategy".

    На основе входных данных создайте соответствующий объект паттерна:

    • "Singleton" и "Factory" — это Creational паттерны
    • "Adapter" и "Decorator" — это Structural паттерны
    • "Observer" и "Strategy" — это Behavioral паттерны

    Сохраните объект паттерна в переменной типа Pattern (интерфейс), демонстрируя принцип программирования на уровне интерфейса. Затем выведите следующие три строки:

    Pattern: [input pattern name]

    Category: [category from getCategory()]

    Purpose: [purpose from getPurpose()]

Вы получите один входной параметр: название паттерна проектирования (String).

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

Шпаргалка

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

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

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

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

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

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String patternName = scanner.nextLine();
        
        // TODO: Объявите переменную типа Pattern (интерфейс)
        Pattern pattern = null;
        
        // TODO: На основе patternName создайте соответствующий объект паттерна:
        // - "Singleton" и "Factory" — это порождающие (Creational) паттерны
        // - "Adapter" и "Decorator" — это структурные (Structural) паттерны
        // - "Observer" и "Strategy" — это поведенческие (Behavioral) паттерны
        
        // TODO: Выведите результат в следующем формате:
        // Pattern: [введенное имя паттерна]
        // Category: [категория из getCategory()]
        // Purpose: [назначение из getPurpose()]
    }
}
quiz iconПроверьте себя

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

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