Что делает паттерн проектирования Factory?

«Что делает паттерн проектирования Factory?» — вопрос из категории Паттерны проектирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Паттерн Factory (Фабрика) — это порождающий шаблон, который инкапсулирует логику создания объектов. Вместо прямого вызова конструктора (new ConcreteClass()) код использует специальный метод или класс (фабрику), который возвращает нужный экземпляр. Это делает систему гибче и упрощает тестирование.

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

public class WebDriverFactory {
    public static WebDriver createDriver(String browserType) {
        switch (browserType.toLowerCase()) {
            case "chrome":
                return new ChromeDriver();
            case "firefox":
                return new FirefoxDriver();
            case "edge":
                return new EdgeDriver();
            default:
                throw new IllegalArgumentException("Unsupported browser: " + browserType);
        }
    }
}

// В тестовом классе
@Test
public void loginTest() {
    // Фабрика скрывает детали инициализации
    WebDriver driver = WebDriverFactory.createDriver(System.getProperty("browser"));
    driver.get("https://example.com");
    // ... шаги теста
}

Преимущества для QA:

  • Упрощение поддержки: Добавление нового браузера (например, Safari) требует изменений только в одном классе-фабрике, а не в сотнях тестов.
  • Удобство конфигурации: Тип создаваемого объекта (браузер, тестовые данные, мок-объект) легко управляется через параметры (системные свойства, конфиг-файлы).
  • Изоляция логики создания: Упрощается написание модульных тестов для самой фабрики и подмена реальных драйверов на заглушки (mocks).