jueves, 2 de julio de 2015
Patrón de Diseño Factory Method con Harbour
Despues de ver como implementar un patron de diseño Singleton en Harbour,
http://xthefull.blogspot.com/2014/11/el-patron-de-diseno-singleton-en-harbour.html
le toca el turno al patrón de diseño del tipo Factory Method
Este patron de diseño correspopnde a los llamados Patrones Creacionales;
Centraliza en una clase constructora la creación de objetos de
un subtipo de un tipo determinado, ocultando al usuario la casuística, es decir,
la diversidad de casos particulares que se pueden prever, para elegir el subtipo que crear.
Parte del principio de que las subclases determinan la clase a implementar.
https://es.wikipedia.org/wiki/Factory_Method_(patr%C3%B3n_de_dise%C3%B1o)
A continuación se muestra un ejemplo de este patrón en Harbour;
#include "hbclass.ch"
/* ------------------------------------------------------ */
/* Patron Diseño FACTORY Method */
/* ------------------------------------------------------ */
CLASS FACTORY
DATA tipo PROTECTED
METHOD New( Tipo )
METHOD creaConexion( )
END CLASS
METHOD New( Tipo ) CLASS Factory
::Tipo := Tipo
RETURN Self
METHOD creaConexion() CLASS Factory
Local oConexion
do case
case ::tipo = "MySql"
oConexion := MySql():New()
case ::tipo = "SqlServer"
oConexion := SqlServer():New()
case ::tipo = "Sqlite3"
oConexion := Sqlite3():New()
otherwise
oConexion := Conexion():New()
end case
RETURN oConexion
/* ------------------------------------------------------ */
/* ------------------------------------------------------ */
CLASS CONEXION
METHOD New() INLINE Self
METHOD Descripcion() INLINE "Conexion Generica"
END CLASS
/* ------------------------------------------------------ */
/* ------------------------------------------------------ */
CLASS MySql FROM CONEXION
METHOD New( ) INLINE Self
METHOD Descripcion() INLINE "Conexion MySql"
END CLASS
/* ------------------------------------------------------ */
/* ------------------------------------------------------ */
CLASS SqlServer FROM CONEXION
METHOD New( ) INLINE Self
METHOD Descripcion() INLINE "Conexion SqlServer"
END CLASS
/* ------------------------------------------------------ */
/* ------------------------------------------------------ */
CLASS Sqlite3 FROM CONEXION
METHOD New( ) INLINE Self
METHOD Descripcion() INLINE "Conexion Sqlite3"
END CLASS
/* ------------------------------------------------------ */
// Ejemplo de uso : ./test MySql
/* ------------------------------------------------------ */
Function Main( cTipo )
Local oFactory, oConexion
oFactory := Factory():New( cTipo )
oConexion := oFactory:creaConexion()
? "Estamos conectados con " + oConexion:Descripcion()
RETURN nil
Suscribirse a:
Enviar comentarios (Atom)
Android y Git. Disponer del hash automáticamente.
Una de las cosas a las que estoy acostumbrado, es tener siempre en mi código, el hash/tag/versión del control de versiones que estoy usan...
-
Voy a publicar una serie de post sobre las funciones de threads que espero os sirva para comprender como podeis sacar provecho a ...
-
Después de más de 2 años, sacrificando fin de semanas y tiempo libre, he podido pasar a una versión totalmente funcional. El Sofware es ca...
-
Os muestro un pequeño video de las posibilidades de Harbour funcioanando como un servidor Web. Dentro de /contrib/httpd, tenéis un serv...
No hay comentarios:
Publicar un comentario