El patrón abstract factory en PHP

Abstract factory encapsula un grupo de fábricas individuales que tienen una funcionalidad común. Lo hace sin especificar sus clases concretas. Esto facilita la escritura de código portátil, porque los clientes pueden intercambiar implementaciones concretas sin cambiar el código.

El siguiente ejemplo demuestra una posible implementación del patrón abstract factory:

<?php
interface Button
{
public function render();
}
interface FormFactory
{
public function createButton();
}
class LoginButton implements Button
{
public function render()
{
return 'Login';
}
}
class RegisterButton implements Button
{
public function render()
{
return 'Register';
}
}
class LoginFactory implements FormFactory
{
public function createButton()
{
return new LoginButton();
}
}
class RegisterFactory implements FormFactory
{
public function createButton()
{
return new RegisterButton();
}
}
// Client
$loginButtonFactory = new LoginFactory();
$button = $loginButtonFactory->createButton();
echo $button->render();
$registerButtonFactory = new RegisterFactory();
$button = $registerButtonFactory->createButton();
echo $button->render();

Comenzamos creando dos interfaces simples, Button y FormFactory. La interfaz Button define un único método render(), que luego implementamos a través de dos implementaciones de clase concretas, LoginButton y RegisterButton. Las dos
las implementaciones de FormFactory, LoginFactory y RegisterFactory, luego instancian las clases de botón correspondientes como parte de su implementación del método createButton().
El cliente usa solo las instancias de LoginFactory y RegisterFactory, evitando así crear instancias directas de clases concretas de botones.

Comparte