CREATIONAL PATTERN

Abstract Factory

نمط المصنع التجريدي

يعني إيه؟ زي محل أثاث - لو اختارت ستايل "مودرن" كل القطع هتكون مودرن! 🛋️
مش هتلاقي كنبة كلاسيك مع ترابيزة مودرن - كل العائلة متناسقة! 🎨

THE CONCEPT

مثال محل الأثاث 🛋️

Abstract Factory = مصنع عائلات من المنتجات! FurnitureFactory 🔵 ModernFactory createSofa() + createTable() 🟣 ClassicFactory createSofa() + createTable() 🛋️ Modern Sofa 🪑 Modern Table 🛋️ Classic Sofa 🪑 Classic Table 🔵 Modern Family 🟣 Classic Family ✅ كل Factory بتنتج عائلة كاملة متناسقة! مستحيل تخلط Modern Sofa مع Classic Table!

🏭 Abstract Factory

الـ Interface اللي بيعرف إزاي نعمل عائلة كاملة من المنتجات - createSofa() و createTable() و createChair()!

🔵 Concrete Factory

المصانع الفعلية زي ModernFactory و ClassicFactory - كل مصنع بينتج ستايل واحد بس!

👨‍👩‍👧‍👦 Product Family

عائلة المنتجات المتناسقة - كل القطع من نفس الستايل عشان البيت يبقى شكله حلو!

الكود 💻

AbstractFactory.js
// 🛋️ Abstract Products
class Sofa {
  sit() { throw "implement!"; }
}
class Table {
  placeItems() { throw "implement!"; }
}

// Concrete Products - Modern Family 🔵
class ModernSofa extends Sofa {
  sit() { return "🛋️ Sitting on sleek Modern Sofa"; }
}
class ModernTable extends Table {
  placeItems() { return "📱 Placing laptop on Modern Glass Table"; }
}

// Concrete Products - Classic Family 🟣
class ClassicSofa extends Sofa {
  sit() { return "🛋️ Relaxing on ornate Classic Sofa"; }
}
class ClassicTable extends Table {
  placeItems() { return "📚 Placing books on Classic Wooden Table"; }
}

// 🏭 Abstract Factory
class FurnitureFactory {
  createSofa() { throw "implement!"; }
  createTable() { throw "implement!"; }
}

// Concrete Factories
class ModernFactory extends FurnitureFactory {
  createSofa() { return new ModernSofa(); }   // 🔵
  createTable() { return new ModernTable(); } // 🔵
}

class ClassicFactory extends FurnitureFactory {
  createSofa() { return new ClassicSofa(); }   // 🟣
  createTable() { return new ClassicTable(); } // 🟣
}
Usage.js
// 🎯 Client Code - مش عارف التفاصيل!
class LivingRoom {
  constructor(factory) {
    this.sofa = factory.createSofa();
    this.table = factory.createTable();
  }
  
  furnish() {
    console.log(this.sofa.sit());
    console.log(this.table.placeItems());
  }
}

// Usage:
const modernRoom = new LivingRoom(new ModernFactory());
modernRoom.furnish();
// 🛋️ Sitting on sleek Modern Sofa
// 📱 Placing laptop on Modern Glass Table

const classicRoom = new LivingRoom(new ClassicFactory());
classicRoom.furnish();
// 🛋️ Relaxing on ornate Classic Sofa
// 📚 Placing books on Classic Wooden Table

// ✅ مستحيل نخلط Modern Sofa مع Classic Table!

جرب! 🎮

🏠

اختار ستايل!

اختار Factory وشوف العائلة كلها!

// اختار Factory وشوف النتيجة!

Factory Method vs Abstract Factory 🤔

🏭

Factory Method

بينتج نوع واحد من المنتجات

createCar() → 🚗
createCar() → 🚙
🏗️

Abstract Factory

بينتج عائلة كاملة من المنتجات!

createSofa() → 🛋️
createTable() → 🪑
createChair() → 💺
Factory Method Builder