Advertisement
kwasinski

MSG Strategy

Feb 10th, 2023
642
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.75 KB | None | 0 0
  1. <?php declare(strict_types = 1);
  2.  
  3.  
  4. class MessageService
  5. {
  6.     protected SenderStrategy $senderStrategy;
  7.  
  8.     public function __construct(SenderStrategy $senderStrategy)
  9.     {
  10.         $this->senderStrategy = $senderStrategy;
  11.     }
  12.  
  13.     public function send(string $message)
  14.     {
  15.         $this->senderStrategy->send($message);
  16.     }
  17. }
  18.  
  19. interface SenderStrategy
  20. {
  21.     public function send(string $message);
  22. }
  23.  
  24. class EmailChannel implements SenderStrategy
  25. {
  26.     public function send(string $message)
  27.     {
  28.         $success = file_put_contents('email', $message);
  29.         if ($success) print 'Email Message sent!'."\n";
  30.     }
  31. }
  32.  
  33. class SMSChannel implements SenderStrategy
  34. {
  35.     public function send(string $message)
  36.     {
  37.         $success = file_put_contents('sms', $message);
  38.         if ($success) print 'SMS Message sent!'."\n";
  39.     }
  40. }
  41.  
  42. class PushNotificationChannel implements SenderStrategy
  43. {
  44.     public function send(string $message)
  45.     {
  46.         $success = file_put_contents('push_notification', $message);
  47.         if ($success) print 'Push notification Message sent!'."\n";
  48.     }
  49. }
  50.  
  51. class CartaChannel implements SenderStrategy
  52. {
  53.     public function send(string $message)
  54.     {
  55.         $success = file_put_contents('carta', $message);
  56.         if ($success) print 'Carta Message sent!'."\n";
  57.     }
  58. }
  59.  
  60. $user = (object) [
  61.     'subscription_channels' => [
  62.         SMSChannel::class,
  63.         EmailChannel::class,
  64.         PushNotificationChannel::class,
  65.         CartaChannel::class,
  66.     ] ,
  67. ];
  68.  
  69. $messagemDoSite = 'Olhe essa promoção'."\n";
  70.  
  71.  
  72. foreach ($user->subscription_channels as $channel)
  73. {
  74.     $messageService = new MessageService(
  75.         new $channel(),
  76.     );
  77.  
  78.     $messageService->send($messagemDoSite);
  79. }
  80.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement