Код - пример #1 | |
1 |
<?php /* Абстрактная фабрика - (Abstract Factory) Фабрика должна возвращать объекты. Но так как она абстрактная, то изначально нужно описать абстрактный класс фабрики, и абстрактные объекты которые она будет производить. Дале мы описываем реализации классов фабрик на основе абстрактной фабрики и реализации класса объектов которые она производит. Тем самым у нас есть различные варианты фабрик и объектов с одинковыми интерфейсами, что может быть удобно. Далее привожу код. Есть абстрактная фабрика машин. Абстрактный класс машин. Создаем классы фабрики "ford" и "vaz" и классы ford_machine и vaz_machine. Фабрики будут производить объект "машины", но свойство "начинака" этих "машин" будет отличаться, прям как в реальной жизни. */ abstract class abstract_machine_factory { function generate_sedan() { return new machine('sedan'); } function generate_universal() { return new machine('universal'); } function generate_hatchback() { return new machine('hatchback'); } } abstract class abstract_machine { protected $_param; function __construct($type = 'sedan') { $this->_param = array(); $this->_param['type'] = $type; } function run() { echo 'brrrrrrrrrrrrrr ...'; } function get_all_param() { return $this->_param; } } class vaz_machine extends abstract_machine { function __construct($type = 'sedan') { parent::__construct($type); $this->_param['firm'] = 'vaz'; } function run() { echo 'tr tr pr tr tr pr ...'; } } class vaz_factory extends abstract_machine_factory { function generate_sedan() { return new vaz_machine('vedro'); } function generate_universal() { return new vaz_machine('taz'); } function generate_hatchback() { return new vaz_machine('korito'); } } class ford_machine extends abstract_machine { function __construct($type = 'sedan') { parent::__construct($type); $this->_param['firm'] = 'ford'; } function run() { echo 'rrrrrrrrrrrrrrrrr ...'; } } class ford_factory extends abstract_machine_factory { function generate_sedan() { return new ford_machine('sedan', 'ford'); } function generate_universal() { return new ford_machine('universal'); } function generate_hatchback() { return new ford_machine('hatchback'); } } /* Фабрика ford_factory производит машины */ $ford_factory = new ford_factory(); $ford_machine = $ford_factory->generate_sedan(); deb($ford_machine->get_all_param()); deb($ford_machine->run()); /* Фабрика vaz_factory производит машины, функции одинаковые но результат (объекты) разные */ $vaz_factory = new vaz_factory(); $vaz_machine = $vaz_factory->generate_sedan(); deb($vaz_machine->get_all_param()); deb($vaz_machine->run()); /* В результате мы видим на экране: Array ( [type] => sedan [firm] => ford ) rrrrrrrrrrrrrrrrr ... Array ( [type] => vedro [firm] => vaz ) tr tr pr tr tr pr ... */ function deb($mVar) { echo("<PRE>"); print_r($mVar); echo("</PRE>"); } |
Список паттернов
Комментариев нет:
Отправить комментарий