fork download
  1. <?php
  2. /*
  3.   Фабрика
  4.   Как интерфейс создания объектов
  5.   (одного или нескольких типов, в зависимости от полиморфного инпута)
  6.  
  7.   Может быть реализорана как класс или отдельная функция
  8.  
  9.   Пример ниже -- фабрика фигур разных типов,
  10.   реализующих единый интерфейс с методом draw();
  11.  
  12.   Следующая ступень, если нужно -- фабрика фабрик;
  13.  
  14. */
  15.  
  16. interface Shape { function draw(); }
  17.  
  18. class SquareShape implements Shape {
  19. function draw(){ echo __METHOD__; }
  20. }
  21. class RectangleShape implements Shape {
  22. function draw(){ echo __METHOD__; }
  23. }
  24. class CircleShape implements Shape {
  25. function draw(){ echo __METHOD__; }
  26. }
  27.  
  28.  
  29. class ShapeFactory
  30. {
  31. function getShape( $type ) {
  32. $type = strtoupper( $type );
  33. if(!$type) return NULL;
  34.  
  35. switch( $type ) {
  36. case 'R': return new SquareShape; break;
  37. case 'S': return new RectangleShape; break;
  38. case 'C': return new CircleShape; break;
  39. default: throw new Exception('Unknown type');
  40. }
  41.  
  42. }
  43.  
  44. }
  45.  
  46. $ShapeFactory = new ShapeFactory;
  47.  
  48. $r = $ShapeFactory->getShape('R');
  49. $s = $ShapeFactory->getShape('S');
  50. $c = $ShapeFactory->getShape('C');
  51. $r->draw();
  52. $s->draw();
  53. $c->draw();
  54.  
  55.  
  56.  
  57.  
Success #stdin #stdout 0.01s 82880KB
stdin
Standard input is empty
stdout
SquareShape::drawRectangleShape::drawCircleShape::draw