Evgenii Legotckoi
Қыр. 17, 2018, 5:48 Т.Қ.

Мысал - РНР-дегі абстрактілі фабрика

Пример шаблона проектирования Абстрактная фабрика на PHP


  1. <?php
  2. /*
  3. * Abstract Factory classes
  4. */
  5.  
  6. abstract class DB_Abstraction_Factory {
  7. protected $settings = array();
  8. protected function __construct() {
  9. $this->settings = Settings::getInstance();
  10. }
  11.  
  12. abstract public function createInstance();
  13. }
  14.  
  15. class DB_Abstraction_Factory_ADODB extends DB_Abstraction_Factory {
  16. public function __construct() {
  17. parent::__construct();
  18. }
  19. public function createInstance() {
  20. require_once('/path/to/adodb_lite/adodb.inc.php');
  21. $dsn = $this->settings['db.dsn'];
  22. $db = ADONewConnection($dsn);
  23. return $db;
  24. }
  25. }
  26.  
  27. class DB_Abstraction_Factory_MDB2 extends DB_Abstraction_Factory {
  28. public function __construct() {
  29. parent::__construct();
  30. }
  31. public function createInstance() {
  32. require_once 'MDB2.php';
  33. $dsn = $this->settings['db.dsn'];
  34. $db = MDB2::factory($dsn);
  35. return $db;
  36. }
  37. }
  38.  
  39. class DB_Abstraction_AbstractFactory {
  40. public static function getFactory() {
  41. $settings = Settings::getInstance();
  42. switch($settings['db.library'])
  43. {
  44. case 'adodblite':
  45. $factory = new DB_Abstraction_Factory_ADODBLITE();
  46. break;
  47. case 'mdb2';
  48. $factory = new DB_Abstraction_Factory_MDB2();
  49. break;
  50. }
  51. return $factory;
  52. }
  53. }
  54.  
  55. /*
  56. * Client's code
  57. */
  58.  
  59. // instantiate Abstract Factory
  60. $abstractfactory = new DB_Abstraction_AbstractFactory();
  61.  
  62. // fetch a concrete Factory (decision handled in Abstract Factory static method)
  63. $factory = $abstractfactory::getFactory();
  64.  
  65. // use concrete Factory to create a database connection object from
  66. // the selected database abstraction library
  67. $db = $factory->createInstance();
  68. ?>

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз