← Читайте первую часть: Галерея Builder Pattern. Классическое искусство
Галерея Builder Pattern: 7 шедевров создания объектов. Часть II
Иллюстрация: абстрактное искусство, вдохновлённое темой паттернов. Источник: 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