PHP Паттерн “Фабричный метод” (Factory Method)
Позволяет определить интерфейс для создания объектов, но оставляет подклассам решение о том, какой класс создавать.
interface Camera {
function takePicture();
}
class MobilePhone {
function makeCall() {
}
}
abstract class CameraPhone implements Camera, MobilePhone {
abstract protected function _buildCamera();
abstract protected function _buildMobilePhone();
function Camera() {
$this->_camera = $this->_buildCamera();
}
function MobilePhone() {
$this->_mobilePhone = $this->_buildMobilePhone();
}
function takePicture() {
echo "Camera is taking picture\n";
}
function makeCall() {
echo "Phone is making call\n";
}
}
class CameraPhoneNexusS implements CameraPhone {
protected function _buildCamera() {
return new Camera();
}
protected function _buildMobilePhone() {
return new MobilePhone();
}
}
class CameraPhoneNokiaC3D implements CameraPhone {
protected function _buildCamera() {
return new Camera();
}
Генерация случайных чисел: Фабричный метод может использоваться для создания различных генераторов случайных чисел, таких как генераторы псевдослучайных чисел или генераторы, основанные на физических процессах.
Создание различных объектов: Фабричный метод позволяет создавать объекты различных типов, определяя общий интерфейс для создания объектов и предоставляя конкретные реализации для каждого типа.
Работа с базами данных: Фабричный метод может быть использован для создания различных соединений с базами данных, определяя общую логику работы с базой данных и предоставляя реализации для конкретных типов баз данных.
Загрузка файлов: Фабричный метод может использоваться для загрузки файлов разных типов, определяя общий интерфейс для загрузки файлов и предоставляя реализации для различных форматов файлов.
Обработка ошибок: Фабричный метод может обрабатывать различные типы ошибок, определяя общий интерфейс обработки ошибок и предоставляя специфические реализации для разных видов ошибок.
Работа с HTTP запросами: Фабричный метод может создавать различные HTTP-клиенты, определяя общий интерфейс работы с HTTP и предоставляя реализации для разных протоколов и транспортных сред.