Блог

Pattern/FAQ:Factory

Этот шаблон является одним из часто используемых. В нём класс просто создаёт объект, который вам необходим. Следующий пример, покажет использование шаблон фабрики:

<?php 

class Book 
{
    private $author = null;
    private $title  = null;

    public function __construct($author, $title)
    {
        $this->author = $author;
        $this->title  = $title;
    }

    public function getCaption()
    {
        return sprintf('%s - %s', $this->author, $this->title);
    }
}

class BookFactory
{
    public static function create($author, $title)
    {
        return new Book($author, $title);
    }
}

echo BookFactory::create('Robert A. Heinlein', 'The Door into Summer')->getCaption();

Этот код создаст объект запрашиваемой “Book”, используя фабрику. Одним из самых больший преимуществ данного паттерна, если вам нужно при создании объекта внедрить зависимости или выполнить какие-то операции, то вы можете описать в фабрике, вместо того чтобы каждый раз их описывать при создании нового объекта. В дальнейшем, когда нужно внести изменения или заменить класс, то вы легко это сделаете, просто изменив код в фабрике, вместо того, чтобы менять его во всех местах проекта.

Использовать шаблон Фабрика не всегда необходимо. В примере, что выше очень простой код, иногда использование фабрики добавляет не нужную сложность. Однако если вы делаете довольно большой и сложный проект, то использование шаблона “Фабрика” позволит вам избежать многих хлопот.