Josué Martínez Vargas 1 Patrón de diseño Factory
Patrón de diseño Factory Descripción Este patrón se utiliza para encapsular de alguna forma el código donde se instancian nuevos objetos de las clases involucradas en una determinada aplicación. O sea, oculta la implementación del keyword new. El escenario en el cual es factible utilizar dicho patrón de diseño es cuando se tiene varias clases que heredan de un mismo padre, las cuales usualmente deben ser instanciadas en distintos puntos de la aplicación. Entonces, en lugar de repetir código del tipo “Dim aThing As New AClass”, se crea una especie de fábrica a la cual se le delega la función de crear los objetos que se necesiten. De esta forma, cada vez que sea necesario crear un nuevo objeto, desde cualquier punto de la aplicación, se puede hacer pidiéndoselo a la fábrica. Esta fábrica será realmente una clase, como veremos a continuación…
Código de ejemplo (VB .Net) Clase padre: Es la clase de la cual se tendrán varios hijos, los cuales serán instanciados desde cualquier punto de la aplicación. Public MustInherit Class ConnectionClass Private mDescripcion As String
En este caso, la clase padre solamente tiene una descripción.
Public Overridable ReadOnly Property Descripcion As String Get Return mDescripcion End Get End Property End Class
Clases hijo: Estas son las clases que será necesario instanciar, eventualmente, desde cualquier punto de la aplicación. Public Class MySqlConnectionClass Inherits ConnectionClass Private mDescripcion As String = "MySql"
En cada clase hijo se especifica el tipo de conexión que corresponde.
Public Overrides ReadOnly Property Descripcion As String Get Return mDescripcion End Get End Property End Class
Josué Martínez Vargas 2 Patrón de diseño Factory Public Class OracleConnectionClass Inherits ConnectionClass Private mDescripcion As String = "Oracle" Public Overrides ReadOnly Property Descripcion As String Get Return mDescripcion End Get End Property End Class
Public Class SQLServerConnectionClass Inherits ConnectionClass Private mDescripcion As String = "SQLServer" Public Overrides ReadOnly Property Descripcion As String Get Return mDescripcion End Get End Property End Class
Clase fábrica: Esta clase representará la fábrica que será responsable de crear nuevas instancias de las clases hijo, cuando la aplicación lo requiera, desde cualquier punto de la misma. Public Class ConnectionFactory Private mTipo As String Public Sub New(ByVal tipo As String) mTipo = tipo End Sub
El constructor de la fábrica debe recibir el tipo de conexión que se requiere que instancie.
Public Function CreateConnection() As ConnectionClass Select Case mTipo Case "Oracle" Return New OracleConnectionClass Case "SQLServer" Return New SQLServerConnectionClass Case "MySql" Return New MySqlConnectionClass Case Else Return Nothing End Select End Function End Class
Se instancia la clase hijo que corresponda, según el tipo que fue especificado previamente a través del constructor.