Menu
Coddy logo textTech

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

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

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

Представляй design patterns как чертежи. Они не дают тебе готовый код для копирования и вставки, а описывают, как структурировать свои classes и objects, чтобы решить конкретный тип задачи. Изучаемые тобой patterns используют уже освоенные тобой концепции OOP: наследование, интерфейсы, полиморфизм и композицию.

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

CategoryНазначениеПримеры
CreationalHow objects are createdSingleton, Factory, Builder
СтруктурныеHow objects are composedAdapter, Decorator, Composite
BehavioralHow objects communicateObserver, Strategy, Command

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

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

challenge icon

Задание

Легко

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

Вы создадите три файла:

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

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

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

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

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

    На основе input создайте appropriate объект pattern:

    • "Singleton" и "Factory" являются Creational patterns
    • "Adapter" и "Decorator" являются Structural patterns
    • "Observer" и "Strategy" являются Behavioral patterns

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

    Pattern: [input pattern name]

    Category: [category from getCategory()]

    Purpose: [purpose from getPurpose()]

Вы получите один input: имя design pattern (String).

Это challenge закрепляет ключевую идею урока: design patterns организованы в категории на основе того, какую проблему они решают. Используя интерфейс, вы также практикуете принцип "programming to an interface, not an implementation" — основную концепцию, которая делает design patterns настолько powerful!

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

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" — порождающие паттерны
        // - "Adapter" и "Decorator" — структурные паттерны
        // - "Observer" и "Strategy" — поведенческие паттерны
        
        // TODO: Выведите результат в следующем формате:
        // Pattern: [имя введённого паттерна]
        // Category: [категория из getCategory()]
        // Purpose: [назначение из getPurpose()]
    }
}
quiz iconПроверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Java