محمد گلمحمدیبرنامه نویس · ⭐ 5.0 ·
سادهترین تعریف Factory Pattern

سادهترین تعریف Factory Pattern در PHP اینه: بهجای اینکه خودت مستقیم مشخص کنی چه کلاسی ساخته بشه، ساختن Object رو میسپاری به یک Factory. بدون Factory
$payment = new ZarinpalPayment();اگر بعداً بخوای درگاه رو عوض کنی، باید جاهای مختلف کدت رو تغییر بدی. با Factory
interface Payment
{
public function pay();
}
class ZarinpalPayment implements Payment
{
public function pay()
{
return "پرداخت با زرینپال";
}
}class IdpayPayment implements Payment
{
public function pay()
{
return "پرداخت با IDPay";
}
}حالا Factory:
class PaymentFactory
{
public static function make(string $type): Payment
{
return match ($type) {
'zarinpal' => new ZarinpalPayment(),
'idpay' => new IdpayPayment(),
default => throw new Exception('درگاه نامعتبر است'),
};
}
}
استفاده:
$payment = PaymentFactory::make('zarinpal');
echo $payment->pay();
خروجی:
پرداخت با زرینپال
یا:
$payment = PaymentFactory::make('idpay');
echo $payment->pay();خروجی:
پرداخت با IDPay
پس Factory دقیقاً چه کار میکند؟
بهجای اینکه کد اصلیت درگیر این باشد:
if ($type === 'zarinpal') {
$payment = new ZarinpalPayment();
} elseif ($type === 'idpay') {
$payment = new IdpayPayment();
}
مینویسی:
$payment = PaymentFactory::make($type);یعنی: «من نمیخوام بدونم چه Objectی ساخته میشه؛ Factory خودش تصمیم بگیره.»