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();
Example #2
0
     */
    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();