Это смущает меня в большинстве самых простых терминов, что это делает? Притворитесь, что Вы объясняете своему родительскому элементу, или кому-то почти нравится.
Завод создает объект. Итак, если вы хотели построить
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();
}
}
Заводы - это шаблон дизайна, который мы используем для управления, как мы ставим Объекты вместе, и использование правильных заводских шаблонов позволяет нам создавать настроенные предметы, которые нам нужны.
В целом «Фабрика» производит что-то: в случае объектно-ориентированного-программирования, «заводской структурой конструкции» производит объекты.
Не имеет значения, если он находится в PHP, C # или любом другом объектно-ориентированном языке.
Как настоящая фабрика, она что-то создает и возвращает.
Представьте себе нечто подобное
$joe = new Joe();
$joe->say('hello');
или фабричный метод
Joe::Factory()->say('hello');
Реализация фабричного метода создаст новый экземпляр и вернет его.
Завод только генерирует объект или объекты.
У вас может быть фабрика, которая создает подключение MySQL.