Adapter_Factory - PHP Online

Form of PHP Sandbox

Enter Your PHP code here for testing/debugging in the Online PHP Sandbox. As in the usual PHP files, you can also add HTML, but do not forget to add the tag <?php in the places where the PHP script should be executed.



Your result can be seen below.

Result of php executing





Full code of Adapter_Factory.php

  1. <?php
  2.  
  3. # Sms Services of different carriers
  4.  
  5. interface ISmsSender
  6. {
  7.     
  8. }
  9.  
  10. class KsSmsSender implements ISmsSender
  11. {
  12.     public function sendMessage()
  13.     {
  14.         echo "Default KS SMS sended!" . PHP_EOL;
  15.     }
  16. }
  17.  
  18. class VfSmsSender implements ISmsSender
  19. {
  20.     public function sendSms()
  21.     {
  22.         echo "Default VF SMS sended!" . PHP_EOL;
  23.     }
  24. }
  25.  
  26. # Adapters for carriers SMS services
  27.  
  28. interface ISmsSenderAdapter
  29. {
  30.     public function send();
  31. }
  32.  
  33. class VfSmsSenderAdapter implements ISmsSenderAdapter
  34. {
  35.     private $vfSmsSender;
  36.     
  37.     public function __construct()
  38.     {
  39.         $this->vfSmsSender = new VfSmsSender();
  40.     }
  41.     
  42.     public function send()
  43.     {
  44.         $this->vfSmsSender->sendSms();
  45.     }
  46. }
  47.  
  48. class KsSmsSenderAdapter implements ISmsSenderAdapter
  49. {
  50.     private $ksSmsSender;
  51.     
  52.     public function __construct()
  53.     {
  54.         $this->ksSmsSender = new KsSmsSender();
  55.     }
  56.     
  57.     public function send()
  58.     {
  59.         $this->ksSmsSender->sendMessage();
  60.     }
  61. }
  62.  
  63. # Adpters factory
  64.  
  65. class SmsSenderAdapterFactory
  66. {
  67.     const VF_TYPE = 'vodafone';
  68.     const KS_TYPE = 'kyivstar';
  69.     
  70.     public static function create(string $type)
  71.     {
  72.         switch ($type)
  73.         {
  74.             case self::VF_TYPE:
  75.                 return new VfSmsSenderAdapter();
  76.             break;
  77.             case self::KS_TYPE:
  78.                 return new KsSmsSenderAdapter();
  79.             break;
  80.             
  81.         }
  82.     }
  83. }
  84.  
  85. # Application main class
  86.  
  87. class App
  88. {
  89.     private static $smsSenderAdapter;
  90.     
  91.     public static function run(ISmsSenderAdapter $smsSenderAdapter)
  92.     {
  93.         self::$smsSenderAdapter = $smsSenderAdapter;
  94.         
  95.         echo "App started!" . PHP_EOL;
  96.         
  97.         self::$smsSenderAdapter->send();
  98.         
  99.         echo "App finished its work!" . PHP_EOL;
  100.         
  101.     }
  102. }
  103.  
  104. # Client code
  105.  
  106. $smsSenderType = "vodafone";
  107.  
  108. $smsSender = SmsSenderAdapterFactory::create($smsSenderType);
  109.  
  110. App::run($smsSender);
File Description
  • Adapter_Factory
  • PHP Code
  • 24 Jan-2020
  • 1.89 Kb
You can Share it: