CREATIONAL PATTERN

Factory Method

نمط طريقة المصنع

يعني إيه؟ زي مصنع سيارات - كل خط إنتاج بينتج نوع مختلف! 🚗
مش محتاج تعرف إزاي بتتصنع - بس قول عايز إيه و المصنع يتكفل! 🏭

THE CONCEPT

مثال مصنع السيارات 🚗

كل Factory بتعمل نوع مختلف من الـ Products! «abstract» CarFactory 🔷 BMWFactory createCar() 💚 TeslaFactory createCar() ❤️ ToyotaFactory createCar() 🚙 BMW X5 🚗 Tesla Model 3 🚕 Toyota Camry creates creates creates ✅ كل Factory بتعمل Product مختلف مش محتاج تعرف التفاصيل - بس نادي على createCar()!

🏭 Creator (المصنع)

الـ Abstract Class اللي بيعرف الـ Factory Method - كل Subclass بتعمل Override وتنتج منتج مختلف!

🏭 Concrete Creator

المصانع الفعلية زي BMWFactory, TeslaFactory - كل واحد بيعمل implement للـ createCar()!

🚗 Product

المنتج النهائي - كل Factory بترجع نوع مختلف من السيارات!

الكود 💻

FactoryMethod.js
// 🚗 Product Interface
class Car {
  drive() { throw "implement!"; }
  getInfo() { throw "implement!"; }
}

// Concrete Products
class BMW extends Car {
  drive() { return "🚙 BMW driving smoothly!"; }
  getInfo() { return "BMW X5 - German Engineering"; }
}

class Tesla extends Car {
  drive() { return "🚗 Tesla zooming silently!"; }
  getInfo() { return "Tesla Model 3 - Electric Power"; }
}

class Toyota extends Car {
  drive() { return "🚕 Toyota cruising reliably!"; }
  getInfo() { return "Toyota Camry - Japanese Quality"; }
}

// 🏭 Creator (Abstract Factory)
class CarFactory {
  // Factory Method - Subclasses override this!
  createCar() { throw "implement createCar()!"; }
  
  // Common operation using the factory method
  deliverCar() {
    const car = this.createCar(); // 👈 Factory Method!
    return `Delivering: ${car.getInfo()}`;
  }
}

// Concrete Factories
class BMWFactory extends CarFactory {
  createCar() { return new BMW(); } // 🔷 Creates BMW
}

class TeslaFactory extends CarFactory {
  createCar() { return new Tesla(); } // 💚 Creates Tesla
}

class ToyotaFactory extends CarFactory {
  createCar() { return new Toyota(); } // ❤️ Creates Toyota
}
Usage.js
// 🎯 Client Code - مش محتاج يعرف تفاصيل السيارات!
function orderCar(factory) {
  const car = factory.createCar();
  console.log(car.getInfo());
  console.log(car.drive());
  return factory.deliverCar();
}

// Usage:
const bmwFactory = new BMWFactory();
const teslaFactory = new TeslaFactory();

orderCar(bmwFactory);   // BMW X5 - German Engineering
orderCar(teslaFactory); // Tesla Model 3 - Electric Power

// 🔥 Adding new car? Just create new Factory + Product!
// No changes to existing code! ✅ Open/Closed Principle

جرب! 🎮

🏭

اختار مصنع لإنتاج سيارة!

// اختار مصنع وشوف النتيجة!

امتى نستخدمه؟ 🤔

🖥️

Cross-Platform UI

عايز تعمل Buttons مختلفة لـ Windows, Mac, Linux - كل Factory تنتج الـ UI المناسب!

🔌

Database Connections

MySQL, PostgreSQL, MongoDB - كل Factory تعمل Connection مختلف!

📄

Document Processing

PDF, Word, Excel - كل Factory تنتج Document مختلف!

🎮

Game Development

Enemies, Weapons, Power-ups - كل Level Factory تنتج Objects مختلفة!

Singleton Abstract Factory