I confess that I'm having a bit of difficulty implementing the strategy pattern in a program that aims to display a different message daily (Ex. Message of the day...), but on special dates there may be some variations (Ex. Merry Christmas : Message from day...), could someone give me an example of how I "could" make this implementation in php?
CodePudding user response:
I haven't touched PHP in a while, so forgive any syntax errors, but the general idea would be to have a class where you can set the strategy you want (in this case, how you want to display the message), and then based on whether or not it's a holiday, you can swap in the holiday strategy, something like:
class DailyMessage {
private $strategy;
private $message;
public function __construct(string $message, Strategy $strategy) {
$this->message = $message;
$this->strategy = $strategy;
}
public function setStrategy(Strategy $strategy) {
$this->strategy = $strategy;
}
public function getMessage() {
return $this->strategy->format($this->getMessage());
}
}
interface Strategy {
public function format($message);
}
class DefaultStrategy implements Strategy {
public function format($message) {
return $message;
}
}
class HolidayStrategy implements Strategy {
private $greeting;
__constructor($greeting) {
$this->greeting = $greeting;
}
public function format($message) {
return $greeting . ': ' . $message;
}
}
$dm = new DailyMessage($messageOfTheDay, new DefaultStrategy());
$holidays = ["Dec 25" => "Merry Christmas", "Oct 31" => "Happy Halloween"];
$today = date('M j');
if (array_key_exists($today, $holidays)) {
$dm->setStrategy(new HolidayStrategy($holidays[$today]));
}
echo $dm->getMessage();