🚀 تخفیف ۳۵٪ + ۳.۵ میلیون هدیه! برنامه‌نویسی رو الان شروع کن - فقط امروز!
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ مهدی بشیرپور
پرداخت انلاین
جامعه پی اچ پی ایجاد شده در ۲۴ تیر ۱۴۰۲

سلام و درود

زمانی که از چند درگاه پرداخت انلاین استفاده می‌کنیم و کاربر موقع پرداخت یک نوع رو انتخاب کرده باشد چطور باید این کلاس استراتژی رو تغییر بدیم که کدمون تمیز باشد

سلام مهدی عزیز

در ابتدا، شما باید یک رابط (Interface) برای کلاس استراتژی تعریف کنید. این رابط باید تمامی عملیات مربوط به پرداخت رو شامل بشه، مانند pay() و سایر متدهای مرتبط.

interface PaymentStrategy {
    public function pay($amount);
}

سپس، برای هر یک از درگاه‌های پرداخت موجود، یک کلاس استراتژی ایجاد بکنید که از رابط PaymentStrategy ارث‌بری کنه و متدهای اون رو پیاده‌سازی کنه.

class PayPalStrategy implements PaymentStrategy {
    public function pay($amount) {
        // کد مربوط به پرداخت با استفاده از درگاه PayPal
    }
}
class CreditCardStrategy implements PaymentStrategy {
    public function pay($amount) {
        // کد مربوط به پرداخت با استفاده از درگاه کارت اعتباری
    }
}

حالا در کد اصلی خودتون، شما باید یک متغیر از نوع PaymentStrategy ایجاد بکنید و این متغیر رو با یکی از کلاس‌های استراتژی مقداردهی اولیه کنید. سپس، با استفاده از این متغیر، می‌تونید عملیات پرداخت رو فراخونی کنید.

$paymentMethod = new PayPalStrategy(); // یا CreditCardStrategy
$paymentMethod->pay($amount);

حالا، اگر بخواید از درگاه پرداخت دیگه ای استفاده کنید، فقط کافیه که متغیر $paymentMethod رو با یک نمونه از کلاس استراتژی مورد نظر تغییر بدید، بدون اینکه نیازی به تغییر در کد پرداخت وجود داشته باشه.

$paymentMethod = new CreditCardStrategy(); // تغییر درگاه پرداخت به کارت اعتباری
$paymentMethod->pay($amount);

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

احمدرضا فاطمی کیا ۲۴ تیر ۱۴۰۲، ۱۳:۳۹