وقتی میشه Strategy رو توی همون constrcut ست کرد چه لزومی به نوشتن setStrategy هست؟
متوجه این بخش نشدم
سلام دوست عزیز
ما براش setter ست کردیم و علتش اینه که بتونیم در ران تایم استراتژیمون رو در صورت نیاز تغییر بدیم
برای همین دیگه نیومدیم دوباره کاری کنیم و یه دور جدا توی constructor این رو تعریف کنیم
موفق باشید ?
اگر construct به این صورت تعریف بشه هم به نظرم میتونه استراتژیمون تو ران تایم تغییر بکنه
private $paymentStrategy; public function __construct(PaymentInterface $paymentStrategy) { $this->paymentStrategy = $paymentStrategy; }
و
$payment = new Payment(new OnlinePayment); $payment->pay(10000);
تفاوتی داره با این که استاد پایین تعریف کرده داره؟
private $paymentStrategy; public function __construct(PaymentInterface $paymentStrategy) { $this->setPaymentStrategy($paymentStrategy); } // To change strategy on runtime public function setPaymentStrategy(PaymentInterface $paymentStrategy) { $this->paymentStrategy = $paymentStrategy; }
$payment = new Payment(new OnlinePayment); $payment->setPaymentStrategy(new OnlinePayment); $payment->pay(10000);
خب کد استاد طبق سناریو بالا که توضیح دادم درست هست و برای همین setter تعریف کردیم دیگه!