Lapa Knowledge Base

Порождающие паттерны (Creational Patterns)

Паттерны, которые решают проблему создания объектов

Что такое порождающие паттерны?

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

Основные паттерны


Подробное описание паттернов

Singleton (Одиночка)

Гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к нему.

Когда использовать:

  • Когда нужен только один экземпляр класса
  • Когда требуется глобальная точка доступа
  • Когда создание объекта дорого

Factory Method (Фабричный метод)

Определяет интерфейс для создания объекта, но позволяет подклассам изменять тип создаваемого объекта.

Когда использовать:

  • Когда заранее неизвестно, объекты каких классов нужно создавать
  • Когда класс делегирует создание объектов подклассам

Abstract Factory (Абстрактная фабрика)

Предоставляет интерфейс для создания семейств связанных объектов без указания их конкретных классов.

Когда использовать:

  • Когда система должна быть независимой от способа создания объектов
  • Когда нужно создавать семейства связанных объектов

Builder (Строитель)

Разделяет создание сложного объекта и его представление, позволяя использовать один и тот же процесс создания для получения различных представлений.

Когда использовать:

  • Когда алгоритм создания сложного объекта не должен зависеть от частей, из которых состоит объект
  • Когда процесс создания должен обеспечивать различные представления создаваемого объекта

Prototype (Прототип)

Определяет виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования этого прототипа.

Когда использовать:

  • Когда классы, экземпляры которых создаются во время выполнения, определяются во время выполнения
  • Когда создание объекта дороже копирования существующего

Примеры использования

Singleton

class DatabaseConnection {
    static instance = null;
    
    static getInstance() {
        if (!DatabaseConnection.instance) {
            DatabaseConnection.instance = new DatabaseConnection();
        }
        return DatabaseConnection.instance;
    }
}

Factory Method

class AnimalFactory {
    createAnimal(type) {
        switch(type) {
            case 'dog':
                return new Dog();
            case 'cat':
                return new Cat();
            default:
                throw new Error('Unknown animal type');
        }
    }
}

Преимущества

  • Инкапсулируют создание объектов
  • Делают систему независимой от конкретных классов
  • Упрощают добавление новых типов объектов
  • Повышают переиспользуемость кода

Недостатки

  • Могут усложнить архитектуру
  • Некоторые паттерны могут снизить производительность
  • Требуют дополнительного кода

Помните: используйте порождающие паттерны только тогда, когда они действительно решают вашу проблему!

Copyright © 2026