← Читайте первую часть: Галерея Builder Pattern. Классическое искусство

Галерея Builder Pattern: 7 шедевров создания объектов. Часть II

Абстрактная иллюстрация к части 2: Галерея Builder Pattern, современное искусство, супрематизм, импрессионизм Иллюстрация: абстрактное искусство, вдохновлённое темой паттернов. Источник: Freepik

🎭 Зал 2: Современное искусство

3️⃣ «Конфиг-объекты: Супрематизм» (Паттерн статической конфигурации или Static Configuration Pattern)

Стиль: Малевич

// Минимальный класс для статической конфигурации
class ConfigBuilder {
  static createAdminConfig() {
    return {
      name: 'Администратор',
      permissions: ['all'],
      role: 'admin'
    };
  }
  
  static createUserConfig() {
    return {
      name: 'Пользователь',
      permissions: ['read', 'edit'],
      role: 'user'
    };
  }
  
  static createModeratorConfig() {
    return {
      name: 'Модератор',
      permissions: ['read', 'edit', 'delete'],
      role: 'moderator'
    };
  }
}

// Примеры вызова — как готовые картины
const adminConfig = ConfigBuilder.createAdminConfig();
const userConfig = ConfigBuilder.createUserConfig();
const moderatorConfig = ConfigBuilder.createModeratorConfig();

console.log(adminConfig);
// Результат: { name: 'Администратор', permissions: ['all'], role: 'admin' }

🖌️ Критики говорят:

“Гениальный минимализм! Но попробуйте нарисовать треугольник…”

4️⃣ «Цепочка методов: Импрессионизм» (Паттерн цепочки методов или Method Chaining Pattern)

Стиль: Моне

// Минимальный класс Builder
class UserBuilder {
  constructor() {
    this.user = {};
  }
  
  withName(name) {
    this.user.name = name;
    return this; // Возвращаем this для цепочки
  }
  
  withEmail(email) {
    this.user.email = email;
    return this;
  }
  
  withRole(role) {
    this.user.role = role;
    return this;
  }
  
  build() {
    return this.user;
  }
}

// Пример вызова — как мазки кисти
const user = new UserBuilder()
  .withName('Клод Моне')
  .withEmail('monet@impressionism.fr')
  .withRole('artist')
  .build();

console.log(user);
// Результат: { name: 'Клод Моне', email: 'monet@impressionism.fr', role: 'artist' }

🖌️ Критики говорят:

“Каждый мазок — отдельный метод! Близко — хаос, издалека — совершенство”

🧭 Правила куратора

Выбирайте кисть по холсту: для эскиза — карандаш, для шедевра — масло

📚 Хотите углубиться в тему? Изучите подробное руководство по Builder Pattern на Refactoring.Guru

Нужна помощь? Присоединяйтесь к моему Telegram-каналу @qawithlove