سلام ,
کد این پترن رو میزارم , امیدوار مفید باشه.
<?php
interface PaymentInterface
{
public function pay(float $amount);
}
// main class for payment
class Payment implements PaymentInterface
{
private $paymentStrategy;
public function __construct(PaymentInterface $paymentStrategy)
{
$this->setPaymentStrategy($paymentStrategy);
}
// To change strategy on runtime
public function setPaymentStrategy(PaymentInterface $paymentStrategy)
{
$this->paymentStrategy = $paymentStrategy;
}
public function pay(float $amount)
{
$this->paymentStrategy->pay($amount);
}
}
// Different ways of Payment :
class OnlinePayment implements PaymentInterface
{
public function pay(float $amount)
{
echo "Cnline payment $amount" . PHP_EOL;
}
}
class CartToCartPayment implements PaymentInterface
{
public function pay(float $amount)
{
echo "CartToCart payment $amount" . PHP_EOL;
}
}
class CashOnPayment implements PaymentInterface
{
public function pay(float $amount)
{
echo "CashOn payment $amount" . PHP_EOL;
}
}
$payment = new Payment(new CartToCartPayment);
$payment->pay(10000);
$payment->setPaymentStrategy(new CashOnPayment);
$payment->pay(20000);