El patrón de diseño factory en PHP

Hay veces que en nuestro código, necesitamos condicionar la instancia de un objeto y otro en función de ciertos parámetros. El patrón de diseño factory en PHP resuelve este problema, abstrayendo a una clase, la responsabilidad de devolver las instancias de los objetos. Este patrón es un patrón de creación de objetos, además, cumple con el principio de inyección de dependencias incluido en los principios SOLID de la programación orientada a objetos

Consideraciones al crear el patrón de diseño factory en PHP

Para poder implementar este patrón en vuestros desarrollos, debéis tener en cuenta las siguientes consideraciones:

  • Las clases de las cuales querremos que la clase factory nos devuelva la instancia, deberán ser una implementación de una interface o una extensión de una clase abstracta, para que podamos llamar a los mismos métodos, sea cual sea la instancia que nos devuelva el objeto.
  • La clase factory que implementemos siempre deberá tener un método estático, que será al que llamaremos para devolver la instancia de la clase que nos interese.

El patrón de diseño factory en PHP en un ejemplo

Como todo se entiende mejor con un ejemplo, vamos a ver uno para que quede claro el patrón.Consideremos la siguiente interfaz y las siguientes clases que lo implementan:

Pongamos que queremos obtener una clase u otra en función del precio.Para conseguir instanciar las clases Coche, Moto y Bicicleta, utilizando el patrón de diseño factory, lo podríamos hacer de la siguiente forma:

A la hora de llamar a  la clase que implementa el patrón de diseño factory en PHP, la llamaríamos de la siguiente forma:

Conclusión

Basándome en mi experiencia, este patrón solo es aplicable en el caso de que vayamos a querer obtener una instancia más de una vez en nuestro código, ya que el tiempo para implementar este patrón, no se amortiza si solamente se necesita hacer una llamada a la clase factory.

Fuente: Wikipedia

1 Star2 Stars3 Stars4 Stars5 Stars (Sin puntuaciones)
Cargando…

Got Something To Say:

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Copyright © 2018. Powered by WordPress & Romangie Theme.