Quizá uno de los temas que para muchas personas es más complejo a la hora de desarrollar aplicaciones es el uso de patrones de diseño. Los patrones de diseño son soluciones de ingeniería de software a problemas recurrentes en el mundo del desarrollo. Cuando aparece el problema X se suele solventar con el patrón de diseño Y. Hoy voy a cubrir en este artículo uno de los patrones más sencillos: el patrón fachada.
Uso de fachadas
¿Qué es una fachada o facade en inglés?. Es un patrón de diseño que nos permite simplificar el interface de comunicación entre dos objetos A y B de tal forma que para el objeto A sea más sencillo interactuar con el objeto B. Supongamos que tenemos las siguientes clases:
Vamos a ver el código de Impresora (Java):
package com.genbetadev; public class Impresora { private String tipoDocumento; private String hoja; private boolean color; private String texto; public String getTipoDocumento() { return tipoDocumento; } public void setTipoDocumento(String tipoDocumento) { this.tipoDocumento = tipoDocumento; } public String getHoja() { return hoja; } public void setHoja(String hoja) { this.hoja = hoja; } public boolean isColor() { return color; } public void setColor(boolean color) { this.color = color; } public String getTexto() { return texto; } public void setTexto(String texto) { this.texto = texto; } public void imprimirDocumento() { System.out.println("imprimiendo:"+ texto+ ",color:" + color+",tipo:"+tipoDocumento+",hoja :"+hoja); } }
Se trata de una clase sencilla que imprime documentos en uno u otro formato. El código de la clase cliente nos ayudará a entender mejor su funcionamiento.
package com.genbetadev; public class PrincipalCliente { public static void main(String[] args) { Impresora i = new Impresora(); i.setHoja("a4"); i.setColor(true); i.setTipoDocumento("pdf"); i.setTexto("texto 1"); i.imprimirDocumento(); Impresora i2 = new Impresora(); i2.setHoja("a4"); i2.setColor(true); i2.setTipoDocumento("pdf"); i2.setTexto("texto 2"); i2.imprimirDocumento(); Impresora i3 = new Impresora(); i3.setHoja("a3"); i3.setColor(false); i3.setTipoDocumento("excel"); i3.setTexto("texto 3"); i3.imprimirDocumento(); } }
Como podemos ver la clase cliente se encarga de invocar a la impresora, y configurarla para después imprimir varios documentos .Ahora bien prácticamente todos los documentos que escribimos tienen la misma estructura (formato A4, Color , PDF). Estamos continuamente repitiendo código. Vamos a construir una nueva clase FachadaImpresoraNormal que simplifique la impresión de documentos que sean los más habituales.
package com.genbetadev; public class FachadaImpresoraNormal { Impresora impresora; public FachadaImpresoraNormal(String texto) { super(); impresora= new Impresora(); impresora.setColor(true); impresora.setHoja("A4"); impresora.setTipoDocumento("PDF"); impresora.setTexto(texto); } public void imprimir() { impresora.imprimirDocumento(); } }
De esta forma el cliente quedará mucho más sencillo :
package com.genbetadev; public class PrincipalCliente2 { public static void main(String[] args) { FachadaImpresoraNormal fachada1= new FachadaImpresoraNormal("texto1"); fachada1.imprimir(); FachadaImpresoraNormal fachada2= new FachadaImpresoraNormal("texto2"); fachada2.imprimir(); Impresora i3 = new Impresora(); i3.setHoja("a4"); i3.setColor(true); i3.setTipoDocumento("excel"); i3.setTexto("texto 3"); i3.imprimirDocumento(); } }
Diseño de patrones e inmutabilidad
Una de las ventajas que tienen los patrones de diseño es su INMUTABILIDAD ya que no cambian aunque cambiemos de lenguaje de programación. Lo creamos o no en muchos casos nos rodean en la programación del día a día. Por ejemplo muchas veces la gente me pregunta ¿Qué es mejor cuando realizamos una petición ajax con JQuery? ¿Usar $.ajax() o usar $.get(), $.post()? .
var peticion = $.ajax( "destino.php" ).done(function() { alert( "ok" ); }) var peticion2 = $.get( "destino.php",function() { alert( "ok" ); }); var peticion3 = $.post( "destino.php",function() { alert( "ok" ); });
Rapidamente aparecen dudas .¿Por qué JQuery tiene métodos tan similares?. Revisando los patrones de diseño podremos ver que $.get() y $.post() son fachadas sobre $.ajax() y que este admite muchos tipos de configuraciones.
En Genbeta Dev | Android Patterns: patrones de diseño para desarrollar aplicaciones Android, Los patrones de diseño de software
Ver todos los comentarios en https://www.genbeta.com
VER 0 Comentario