محمد گلمحمدی
محمد گلمحمدیبرنامه نویس · ⭐ 5.0 ·

ساده‌ترین تعریف Factory Pattern

ساده‌ترین تعریف Factory Pattern

ساده‌ترین تعریف Factory Pattern در PHP اینه: به‌جای اینکه خودت مستقیم مشخص کنی چه کلاسی ساخته بشه، ساختن Object رو می‌سپاری به یک Factory. بدون Factory

php
$payment = new ZarinpalPayment();

اگر بعداً بخوای درگاه رو عوض کنی، باید جاهای مختلف کدت رو تغییر بدی. با Factory

php
interface Payment
{
    public function pay();
}


class ZarinpalPayment implements Payment
{
    public function pay()
    {
        return "پرداخت با زرین‌پال";
    }
}
php
class IdpayPayment implements Payment
{
    public function pay()
    {
        return "پرداخت با IDPay";
    }
}

حالا Factory:

php

class PaymentFactory
{
    public static function make(string $type): Payment
    {
        return match ($type) {
            'zarinpal' => new ZarinpalPayment(),
            'idpay'    => new IdpayPayment(),
            default    => throw new Exception('درگاه نامعتبر است'),
        };
    }
}

استفاده:

php

$payment = PaymentFactory::make('zarinpal');


echo $payment->pay();

خروجی: پرداخت با زرین‌پال یا:

php
$payment = PaymentFactory::make('idpay');

echo $payment->pay();

خروجی: پرداخت با IDPay پس Factory دقیقاً چه کار می‌کند؟ به‌جای اینکه کد اصلیت درگیر این باشد:

php

if ($type === 'zarinpal') {
    $payment = new ZarinpalPayment();
} elseif ($type === 'idpay') {
    $payment = new IdpayPayment();
}

می‌نویسی:

php
$payment = PaymentFactory::make($type);

یعنی: «من نمی‌خوام بدونم چه Objectی ساخته میشه؛ Factory خودش تصمیم بگیره.»

محمد گلمحمدیسوالی درباره این موضوع داری؟
از محمد گلمحمدی بپرس یا جلسه آنلاین رزرو کن
سوال بپرسرزرو جلسه