Patrones de Diseño: Strategy


Ahora hablaremos un poco de arquitectura de software. Mucho se habla de patrones de diseño de software (por ejemplo en el trabajo). Pero como ejemplificar este significado? Bueno pues un patrón de diseño trata de resolver un problema en especifico. Hay muchas formas de resolver problemas planteados a la hora de desarrollar software. Seguramente en el nuevo proyecto que nos asignaron tenemos que resolver la forma en que se comportara nuestro software en ciertas condiciones, como procesara la información que tiene a su disposición o como creara nuevas instancias de objectos. Pero alto! seguramente ya hubo otras personas que tuvieron el mismo problema que tú y se dieron cuenta que ese problema se comportaba siempre de cierta forma (siguiendo un patrón) y había una forma optima de resolverlo. Aquí es donde nacen los patrones de diseño de software, vienen a resolver problemas conociendo como se comporta.
Los patrones de diseño se clasifican en:
  1. Patrones de Creación: patrones de diseño software que solucionan problemas de creación de instancias. Nos ayudan a encapsular y abstraer dicha creación.
  2. Patrones Estructurales: patrones de diseño software que solucionan problemas de composición (agregación) de clases y objetos.
  3. Patrones De Comportamiento: patrones de diseño software que ofrecen soluciones respecto a la interacción y responsabilidades entre clases y objetos, así como los algoritmos que encapsulan.
Dejaré un ejemplo del patrón Strategy (de comportamiento); Strategy permite tener diferentes comportamientos para objectos del mismo tipo, se persigue encapsular el comportamiento, se puede usar una estrategia diferente dependiendo del contexto del problema. bueno sin mas, dejo aquí un ejemplo y pronto agregaré mas patrones mientras les dejo una recomendación:  Patrones de Diseno – GOF [Gamma,Helm,Johnson,Vlissides]
 

 using System;
namespace Strategy
 {
 public interface IComportamientoFrenos
 {
 void Frenar();
 }
public class FrenadoABS : IComportamientoFrenos
 {
 public void Frenar()
 {
 Console.WriteLine("Frenado con frenos ABS");
 }
 }
public class FrenadoNormal : IComportamientoFrenos
 {
 public void Frenar()
 {
 Console.WriteLine("Frenado con frenos normales");
 }
 }
public class Coche
 {
 protected IComportamientoFrenos comportamientoFrenos { get; set; }
public void Frenado()
 {
 comportamientoFrenos.Frenar();
 }
 }
public class cocheAntiguo : Coche
 {
 public cocheAntiguo()
 {
 comportamientoFrenos = new FrenadoNormal();
 }
 }
public class cochenuevo : Coche
 {
 public cochenuevo()
 {
 comportamientoFrenos = new FrenadoABS();
 }
 }
class Program
 {
 static void Main(string[] args)
 {
 cocheAntiguo coche1 = new cocheAntiguo();
 cochenuevo nuevo = new cochenuevo();
coche1.Frenado();
 nuevo.Frenado();
 Console.Read();
 }
 }
 }
Fuente: El Framework de Luis

No hay comentarios:

Publicar un comentario