Josué Martínez Vargas 1 Patrón de diseño Strategy
Patrón de diseño Strategy Descripción Se aplica para separar la funcionalidad de la estructura de clases. El escenario en el cual se puede implementar es cuando tenemos una clase padre de la cual heredan una serie de clases hijo, y se necesita que cada hijo implemente una función determinada de forma distinta. El patrón consiste en crear una interfaz que declare la función que se desea separar, y declarar una clase por cada implementación que vaya a existir, a estas se les llamará clases algoritmo, y cada una deberá implementar la interfaz. Luego, en la clase padre se define una variable del tipo de la interfaz que fue creada previamente y un método Set para la misma. Además se declara la función que se desea heredar a los hijos y en su implementación se utiliza la variable del tipo de la interfaz. Finalmente, en cada clase hijo se debe modificar el constructor, añadiendo la invocación al método Set de la clase padre, y se le pasa como parámetro una nueva instancia de la clase algoritmo que corresponda. Código de ejemplo (VB .Net) Clase Padre: Es la clase abstracta de la cual se va a heredar Public MustInherit Class Dog Private _IBark As IBark
Se declara una variable del tipo de la interfaz.
Public Sub SetTypeOfBark(ByVal type As IBark) _IBark = type End Sub
Se crea un método para definir el tipo de ladrido.
Public Function Bark() As String Return _IBark.Bark() El método ladrido delega su implementación a la End Function variable del tipo de la interfaz.
End Class
Clases Hijos: Son las clases que heredan. En este caso, Peke y GreatDane son dos razas particulares que heredan de Dog. Public Class Peke Inherits Dog Public Sub New() SetTypeOfBark(New BarkAsPeke()) End Sub End Class
En el constructor se invoca la función para definir el tipo de ladrido. Y se le pasa como parámetro una nueva instancia de la clase algoritmo que corresponda.
Josué Martínez Vargas 2 Patrón de diseño Strategy
Public Class GreatDane Inherits Dog Public Sub New() SetTypeOfBark(New BarkAsGreatDane()) End Sub End Class
Interfaz: Aquí se declara la función o el método que se quiere implementar de forma distinta para cada clase hijo, en este caso, el ladrido debe ser diferente para las razas Peke y GreatDane. Public Interface IBark Function Bark() As String End Interface
Se declara la función o el método Bark para luego implementarlo en las clases algoritmo.
Clases Algoritmo: Estas clases son las que tienen el código que implementa la función. En este caso, la clase BarkAsPeke implementa el ladrido que deberá tener la raza Peke. Public Class BarkAsPeke Implements IBark Public Function Bark() As String Implements IBark.Bark Return "I'm a Peke" Se especifica la forma en que deberá End Function ladrar un perro de raza Peke. End Class
Public Class BarkAsGreatDane Implements IBark Public Function Bark() As String Implements IBark.Bark Return "I'm a Great Dane" End Function End Class