Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Resumen
El patrón estrategia es útil cuando hay un conjunto de algoritmos relacionados y un objeto cliente que
necesita dinámicamente elegir uno de esos algoritmos y adaptarlos a las necesidades actuales.
Descripción
El patrón estrategia es útil cuando hay un conjunto de algoritmos relacionados y un objeto cliente que
necesita dinámicamente elegir uno de esos algoritmos y adaptarlos a las necesidades actuales.
El patrón estrategia sugiere mantener la implementación de cada algoritmo en clases separadas. Cada
algoritmo encapsulado en una clase separada es denominado una estrategia. Un objeto que usa el
objeto estrategia es denominado objeto contexto.
Con diferentes objetos estrategia, cambiar el comportamiento del objeto contexto es cuestión de
cambiar el objeto estrategia con uno de los algoritmos solicitados.
Para facilitar que el objeto contexto acceda a diferentes objetos estrategia de una manera similar, todos
los objetos estrategia deben ofrecer la misma interfaz.
Una vez que el grupo de algoritmos está encapsulado en un conjunto de clases estrategia en una
jerarquía de clases, un cliente puede escoger los algoritmos mediante la selección e instanciación de la
clase estrategia apropiada. Para cambiar el comportamiento del contexto, un objeto cliente necesita
configurar el contexto con la instancia de la estrategia seleccionada. Este tipo de arreglo separa
completamente la implementación de un algoritmo de su contexto de uso. Como resultado, cuando la
implementación de un algoritmo cambia o un nuevo algoritmo es adicionado al grupo, tanto el contexto
como el objeto cliente no se ven afectados.
Se debe tener en cuenta, que implementar diferentes algoritmos usando condicionales viola el principio
básicio open-closed. Por eso el patrón estrategia ofrece un enfoque elegante de diseño.
Ejemplo
Diseñar una clase EncryptLogger que cifre un mensaje de texto antes de enviarlo a una instancia
FileLogger (que registra el mensaje cifrado en un archivo). Para cifrar el mensaje de texto,
EncryptLogger llama al método encrypt (String).
En general, hay muchos formas diferentes de cifrar un mensaje de texto, utilizando diferentes
algoritmos de ciframiento. A continuación se explican 4 algoritmos.
• SimpleEncryption. Este algoritmo cambia el texto una posición a la derecha o a la izquierda.
Ejemplo: Texto plano: This es a message, Texto cifrado: eThis es a messag
• CaesarCypher. Este algoritmo es una rotación-sustitución donde los caracteres son cambiados
a la derecha una posición. Esto implica reemplazar la A con la B, la B con la C, …, la Z por la
A. Esto se le llama cifrado César, ya que rota el alfabeto una posición. Ejemplo: This is a
message, Texto cifrado: Uijt jt b nfttbhf. También se puede rotar 2 o n posiciones cada letra del
alfabeto.
• SubstitutionCypher. Este algoritmo utiliza una tabla de sustituciones de cada letra del alfabeto
(Ver Figura 1). Ejemplo: Texto plano: This is a Message , Texto cifrado: mWNR NR T
DXRRTnX .
1
• CodeBookCypher. Este algoritmo implica reemplazar palabras de un texto plano con su
correspondiente entrada en una tabla código-libro (code-book) (Ver Figura 2). Ejemplo: Texto
plano:This Is A True Statement , texto cifrado: Design Patterns Are Really Useful .
Figura 3: Diseño
completo
2
A Código fuente en Java
A continuación el código fuente en java.
public interface EncryptionStrategy {
public String encrypt(String inputData);
}
import java.util.HashMap;
import java.util.StringTokenizer;
public class CodeBookCypher implements EncryptionStrategy {
private HashMap codeContents = new HashMap();
/**
*
* Escribe el mensaje en un archivo.
*
*/
public class FileLogger {
public void logMsg(String fileName, String msg) {
//Falta implementar el codigo que graba a un archivo, no es necesario, basta
con el mensaje.
System.out.println("Mensaje:" + msg + " grabado en el archivo" + fileName);
}
}
To do
Diseñar e implementar una aplicación que permita ordenar un arreglo de datos utilizando diferentes
algoritmos de ordenamiento: burbuja, selección, shell, quick sort, etc. Aplicar el patrón estrategia.