lunes, 22 de noviembre de 2010

Patrones de diseño

Lenguajes de Programación - PUNTOS EXTRA

Hola compañeros, en esta entrada les hablaré sobre los patrones de diseño. 

Los Patrones de diseño son normalmente conocidos como "Design Patterns". Y se preguntarán ¿Qué son los patrones de diseño? Bueno los patrones de diseño son simples soluciones elegantes a problemas específicos y comunes del diseño orientado a objetos. Son soluciones que se basan en la experiencia y que se ha demostrado que funcionan correctamente.

Es evidente que a lo largo de la variedad de diseños de aplicaciones existen problemas que se repiten o que son análogos, o sea, que responden a un cierto patrón. Sería deseable tener una colección de dichos patrones con las soluciones más óptimas para cada caso. Les hablaré de los más comunes y conocidos.

Los patrones de diseño no son fáciles de comprender, pero cuando entiendes su funcionamiento, los diseños serán mucho más flexibles, modulares y reutilizables. Han ido revolucionado el diseño orientado a objetos.  

Les hablaré de los patrones de diseño a objetos más comunes publicados en el libro "Design Patterns", escrito por los que normalmente se conoce como GoF (gang of four, "+pandilla de los cuatro).

Patrones de creación



Abstract Factory. Nos proporciona una interfaz para crear familias de objetos o que dependen entre sí, sin especificar sus clases concretas.

Builder. Separa la construcción de un objeto complejo de su representación, de forma que el mismo proceso de construcción pueda crear diferentes representaciones.

Factory Method. Define la interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar. Permite que una clase delegue en sus subclases la creación de objetos.

Prototype. Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos copiando este prototipo.

Singleton. Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella.


Patrones estructurales



Adapter. Convierte la interfaz de una clase en otra diferente que es la que esperan los clientes.

Bridge. Separa una abstracción de su implementación, de manera que las dos puedan variar de forma independiente.

Composite. Combina objetos en estructuras de árbol para representar jerarquías de parte-todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos.

Decorator. Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la herencia para extender la funcionalidad.

Facade. Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema se más fácil de usar.

Flyweight. Usa el compartimiento para permitir un gran número de objetos de grano fino de forma eficiente.

Proxy. Proporciona un sustituto o representante de otro objeto para controlar el acceso a éste.


Patrones de comportamiento


Chain of Responsibility. Evita unic el emisor de una petición a su receptor, al dar a más de un objeto la posibilidad de responder a la petición. Crea una cadena con los objetos receptores y pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto.

Command. Envuel una petición en un objeto, permitiendo así hacer algo de tal forma que mediante la configuracion de ciertos parametros modifiques el resultado mediante las distintas peticiones, llevar un registro de las peticiones y poder deshacer la operaciones.

Interpreter. Define una representación de su gramática junto con un intérprete que usa dicha representación para interpretar las sentencias del lenguaje.

Iterator. Proporciona una forma de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna.

Mediator. Define un objeto que envuelve cómo interactúan un conjunto de objetos. Difine un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente.

Memento. Representa y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste puede volver a dicho estado más tarde.

Observer. Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos.

State. Permite que un objeto modifique su comportamiento cada vez que cambia su estado interno.

Strategy. Define una familia de algoritmos, encapsula uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan.

Template Method. Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura.

Visitor. Representa una operación sobre los elementos de una estructura de objetos. Permite definir una nueva operación sin cambiar las clases de los elementos sobre los que opera.




1 comentario: