Что такое Шаблон разработки Фабрики в PHP?

Это смущает меня в большинстве самых простых терминов, что это делает? Притворитесь, что Вы объясняете своему родительскому элементу, или кому-то почти нравится.

84
задан JasonDavis 18 January 2010 в 01:28
поделиться

4 ответа

Завод создает объект. Итак, если вы хотели построить

 class A{
    public $classb;
    public $classc;
    public function __construct($classb, $classc)
    {
         $this->classb = $classb;
         $this->classc = $classc;
    }
  }

, вы не захотите полагаться на необходимость выполнения следующего кода каждый раз, когда вы создаете объект

$obj = new ClassA(new ClassB, new Class C);

, именно здесь завод. Мы определяем фабрику, чтобы позаботиться об этом. Для нас:

class Factory{
    public function build()
    {
        $classc = $this->buildC();
        $classb = $this->buildB();
        return $this->buildA($classb, $classc);

    }

    public function buildA($classb, $classc)
    {
        return new ClassA($classb, $classc);
    }

    public function buildB()
    {
        return new ClassB;
    }

    public function buildC()
    {
        return new ClassC;
    }
}

Теперь все, что нам нужно сделать, это

$factory = new Factory;
$obj     = $factory->build();

, реальное преимущество, когда вы хотите изменить класс. Позвольте сказать, что мы хотели пройти в другом классе:

class Factory_New extends Factory{
    public function buildC(){
        return new ClassD;
    }
}

или новую класс:

class Factory_New2 extends Factory{
    public function buildB(){
        return new ClassE;
    }
}

Теперь мы можем использовать наследство, чтобы легко изменить, как создан класс, поставить в другой набор классов.

Хороший пример может быть этот класс пользователей:

class User{
    public $data;
    public function __construct($data)
    {
        $this->data = $data;
    }
}

в этом классе $ данные - это класс, который мы используем для хранения наших данных. Теперь для этого класса позволяет сказать, что мы используем сеанс для хранения наших данных. Завод будет выглядеть так:

class Factory{
    public function build()
    {
        $data = $this->buildData();
        return $this->buildUser($data);
    }

    public function buildData()
    {
        return SessionObject();
    }

    public function buildUser($data)
    {
        return User($data);
    }
}

Теперь позволяет сказать вместо этого, мы хотим хранить все наши данные в базе данных, это действительно просто изменить его:

class Factory_New extends Factory{
    public function buildData()
    {
        return DatabaseObject();
    }
}

Заводы - это шаблон дизайна, который мы используем для управления, как мы ставим Объекты вместе, и использование правильных заводских шаблонов позволяет нам создавать настроенные предметы, которые нам нужны.

170
ответ дан 24 November 2019 в 08:30
поделиться

В целом «Фабрика» производит что-то: в случае объектно-ориентированного-программирования, «заводской структурой конструкции» производит объекты.

Не имеет значения, если он находится в PHP, C # или любом другом объектно-ориентированном языке.

1
ответ дан 24 November 2019 в 08:30
поделиться

Как настоящая фабрика, она что-то создает и возвращает.

Представьте себе нечто подобное

$joe = new Joe();
$joe->say('hello');

или фабричный метод

Joe::Factory()->say('hello');

Реализация фабричного метода создаст новый экземпляр и вернет его.

18
ответ дан 24 November 2019 в 08:30
поделиться

Завод только генерирует объект или объекты.

У вас может быть фабрика, которая создает подключение MySQL.

http://en.wikipedia.org/wiki/factory_method_pattern

0
ответ дан 24 November 2019 в 08:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: