22 мая 2024 г. (изменено: 22 мая 2024 г.)

Канал: @cherkashindev

1 776

🏗️ Паттерн “Простая фабрика”

Ранее я писал:

Логическое продолжение этой “базы” — паттерн “простая фабрика”. Он является более простой альтернативой для порождающих паттернов:

  • фабричный метод
  • абстрактная фабрика

По ощущению, используется гораздо чаще, чем его старшие братья (на нём держится весь полиморфизм 😄).

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

Выглядит следующим образом:

function createGitService(type: string, host: string, token: string): GitService | null {
  switch (type) {
    case 'Gitlab':
      return new GitlabService(host, token);
    case 'Gitea':
      return new GiteaService(host, token);
    default:
      return null;
  }
}

💡 Что нам это даёт?

  • Упрощает код, когда нужно избежать прямых зависимостей от конкретных классов;
  • Позволяет инкапсулировать логику создания объектов, ведь логика может быть сложнее, чем простая передача параметров в конструктор.

Этот же паттерн используется внутри хорошо известного вам document.createElement("div") метода. Мы передаём название тега, а метод создаёт тег нужного нам типа.

Как-нибудь расскажу, как он работает под капотом в Хроме.

@cherkashindev

👍 17 🔥 4