حمیده دلیری
خواندن ۱ دقیقه·۱ ماه پیش

2- Design Patterns (الگوهای طراحی): Factory Method


الگوی Factory Method (متد کارخانه‌ای) چیست؟

این الگو یک روش استاندارد برای ایجاد اشیا ارائه می‌دهد، بدون اینکه کلاس دقیق شیء را مستقیماً مشخص کنیم. به‌عبارت دیگر، به جای اینکه از new ClassName() استفاده کنیم، یک متد مخصوص (Factory Method) داریم که مسئول ایجاد و بازگرداندن نمونه‌ی مناسب است.

چرا از Factory Method استفاده کنیم؟

کاهش وابستگی (Decoupling) → کنترلرها و بخش‌های مختلف سیستم وابسته به کلاس‌های خاص نمی‌شوند. ✅ انعطاف‌پذیری بیشتر → به‌راحتی می‌توان کلاس‌های جدید را بدون تغییر در کد اصلی اضافه کرد. ✅ کد تمیزتر و سازمان‌یافته‌تر → مسئولیت ساخت اشیا در یک مکان مشخص مدیریت می‌شود.

مثال در Laravel

فرض کنید چندین نوع پرداخت داریم و می‌خواهیم یک متد برای ایجاد شیء پرداخت مناسب داشته باشیم:

بدون Factory Method (روش نادرست)

class PaymentController { public function pay($type) { if ($type === 'paypal') { $payment = new PayPalPayment(); } elseif ($type === 'stripe') { $payment = new StripePayment(); } $payment->process(); } }

🔴 این روش باعث می‌شود که کنترلر وابسته به کلاس‌های مختلف باشد، که نگهداری آن را سخت می‌کند.

با استفاده از Factory Method (روش بهینه)

class PaymentFactory { public static function create($type) { return match ($type) { 'stripe' => new StripePyment(), default => throw new Exception('نوع پرداخت نامعتبر است.'), }; } } // استفاده در کنترلر class PaymentController { public function pay($type) { $payment = PaymentFactory::create($type); $payment->process(); } }

مزایا:

  • کنترلر دیگر وابسته به کلاس‌های خاص نیست.
  • اضافه کردن روش‌های جدید پرداخت آسان‌تر است.
  • کد خواناتر و مرتب‌تر می‌شود.

جمع‌بندی

الگوی Factory Method زمانی مفید است که بخواهید نمونه‌هایی از کلاس‌های مختلف را بدون مشخص کردن مستقیم آن‌ها ایجاد کنید. این الگو به‌خصوص در سیستم‌هایی که نیاز به تغییرپذیری و توسعه‌پذیری دارند، بسیار کاربردی است.

شاید از این پست‌ها خوشتان بیاید