class Application { public function __construct(GUIFactory $factory) { $button = $factory->createButton(); $button->setCaption("Start"); $button->render(); } } /** * Класс определяет платформу на которой работает и в соответствии от неё создаёт "класс-клиент", использующий "продукты" * (в данном случае создание кнопок), с передаваемым параметром, определённой фабрики, в использование "клиентом". */ class ApplicationRunner { public static function run() { new Application(self::createOsSpecificFactory()); } public static function createOsSpecificFactory() { $sys = substr(PHP_OS, 0, 3); if (strtoupper($sys) === 'WIN') { return new WinFactory(); } else { return new LinFactory(); } } } ApplicationRunner::run();
public function __construct(GUIFactory $factory) { $button = $factory->createButton(); $button->paint(); } } /** * Class ApplicationRunner */ class ApplicationRunner { public function run() { new Application($this->getOsSpecificFactory()); } /** * @return GUIFactory */ public function getOsSpecificFactory() { $flag = rand(0, 1); if ($flag) { return new WinFactory(); } else { return new OSXFactory(); } } } $application = new ApplicationRunner(); $application->run();