Sumar valores de un array con PHP
Sumar valores de un array con PHP

En php tenemos varios patrones de diseño para poder realizar los trabajos del día a día de una forma ya definida y que sabemos que funciona, aproximadamente existen 23 patrones de diseño.

En esta entrada vamos a tratar de explicar para que sirve el patrón factory method en php, si lo explicamos de forma sencilla, este patrón proporciona un método abstracto a sus subclases ya que no conoce el objeto con el que debe trabajar, por ejemplo, imaginemos que tenemos una aplicación que genera compras directas y suscripciones, una compra directa es un objeto y una suscripción es otro objeto, el patrón factory method ofrece un método para que las subsclases que lo utilicen puedan crear la instancia sin necesidad de conocerla.

Para desarrollar un ejemplo sencillo vamos a simular el anterior ejemplo, un cliente de un blog tiene dos opciones, paga un pago único y así tener acceso a todo el material del sitio, o pagar una suscripción y tener acceso por ejemplo durante un mes.

Lo primero que debemos crear es una clase abstracta Customer que contenga un método abstracto, ese método será el que haga efectivo el patrón factory method.


El método buildOrder acepta el precio a pagar por la orden realizada, pero cómo podemos ver, la clase no sabe de que tipo de orden se trata, si un pago anual o una suscripción mensual, para eso debemos crear los posibles tipos de ordenes que tenemos en nuestra aplicación.


Aquí tenemos la primera, y será utilizada cuando un cliente realice un pago anual al contado, esa es la idea, ahora vamos a crear la clase que también extiende de Customer y permite crear las suscripciones.


Exactamente igual que antes, pero en lugar de devolver una instancia de OrderCash devolvemos una instancia de OrderSubscription, vamos a crear las dos clases.


Cómo podemos ver, en el constructor tenemos el precio del pedido, el cual lo establecemos como una propiedad de la clase, finalmente tenemos el método paid que se supone debe tener la lógica para gestionar el pago.


Y hacemos lo mismo con la clase OrderSubscription, pero si nos damos cuenta, estamos haciendo lo mismo en ambas clases, por lo tanto, sería una buena práctica que estas clases extendieran de otra clase abstracta y firmase los métodos que tienen en común, después obviamente cada clase podría implementar su propia lógica.

Para utilizar el sistema que acabamos de crear simplemente podemos hacer lo siguiente.


La idea de los patrones de diseño no es utilizarlos a cada momento, sino conocerlos, te garantizo que si los conoces y se dan las circunstancias sabrás cuando debes utilizar uno u otro, y son algo muy necesario para cualquier buen desarrollador.