<?php
/*
Фабрика
Как интерфейс создания объектов
(одного или нескольких типов, в зависимости от полиморфного инпута)
Может быть реализорана как класс или отдельная функция
Пример ниже -- фабрика фигур разных типов,
реализующих единый интерфейс с методом draw();
Следующая ступень, если нужно -- фабрика фабрик;
*/
interface Shape { function draw(); }
class SquareShape implements Shape {
function draw(){ echo __METHOD__; }
}
class RectangleShape implements Shape {
function draw(){ echo __METHOD__; }
}
class CircleShape implements Shape {
function draw(){ echo __METHOD__; }
}
class ShapeFactory
{
function getShape( $type ) {
if(!$type) return NULL;
switch( $type ) {
case 'R': return new SquareShape; break;
case 'S': return new RectangleShape; break;
case 'C': return new CircleShape; break;
default: throw new Exception('Unknown type');
}
}
}
$ShapeFactory = new ShapeFactory;
$r = $ShapeFactory->getShape('R');
$s = $ShapeFactory->getShape('S');
$c = $ShapeFactory->getShape('C');
$r->draw();
$s->draw();
$c->draw();