sábado, 9 de mayo de 2009
Prototype

Prototype tiene un objeto que se utiliza como base para crear una nueva instancia con los mismos valores. Proporcionar un "crear en base al estado existente" este comportamiento permite a los programas realizar operaciones como impulsado por los usuarios a copiar, y para inicializar los objetos a un estado que se ha establecido a través del uso del sistema. Esto es a menudo preferible a inicializar el objeto con un conjunto genérico de algunos valores.

Características generales de este patrón:

Nombre:

Prototype.

Propósito:

El objetivo de este patrón es especificar los tipos de objetos a crear por medio de una instancia que hace de prototipo, creando nuevos objetos copiando dicha instancia.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Las clases a instanciar sean especificadas en tiempo de ejecución.

· Para evitar construir una jerarquía de clases de fábricas paralela a la jerarquía de clases de producto.

· Cuando las instancias de una clase puedan tener uno de entre sólo unos pocos estados diferentes.

Estructura:


Participantes:

· Prototype: Declara una interfaz para clonarse.

· ConcretePrototype: Implementa una operación para clonarse.

· Cliente: Crea un nuevo objeto pidiéndole a un prototype que se clone.

Implementación:

· Usar un gestor de prototype: Cuando el número de prototypes no es fijo (cuando pueden ser creados y destruidos dinámicamente).

· Implementar la operación Clone.

· Inicializar los clones (Personalizarlos).

Colaboraciones:

· Un cliente solicita a un prototype que se clone a si mismo.

Consecuencias:

· Se pueden agregar y eliminar productos en tiempo de ejecución.

· Permite configurar una aplicación con clases dinámicamente.

· Especificar nuevos objetos modificando valores.

· Especificar nuevos objetos variando la estructura.

Patrones relacionados:

· Abstract factory.

· Factory method.

Etiquetas: , ,

 
posted by Camilo Mojica at 22:00 | Permalink | 0 comments
Builder

Builder (Constructor) es usado para permitir la creación de una variedad de objetos complejos desde un objeto fuente (Producto), el objeto fuente se compone de una variedad de partes que contribuyen individualmente a la creación de cada objeto complejo a través de un conjunto de llamadas a interfaces comunes de la clase Abstract Builder.

Características generales de este patrón:

Nombre:

Builder.

Proposito:

Separar la construcción de un objeto complejo de su representación de manera que el mismo proceso de construcción pueda crear diferentes representaciones.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· El algoritmo para la creación de un objeto complejo debe ser independiente de las partes que componen el objeto y la forma en que está ensamblado.

· El proceso de construcción debe permitir representaciones diferentes del objeto construido.

Estructura:

Participantes:

· Director: Tiene una referencia a AbstractBuilder. Director llama los métodos Creacionales en su instancia constructor para las distintas partes y el constructor de la construcción.

· AbstractBuilder: La interfaz que define los métodos disponibles para crear las distintas partes del producto.

· ConcreteBuilder: Implementa la interfaz AbstractBuilder. ConcreteBuilder implementa todos los métodos necesarios para crear un verdadero product. La implementación de los métodos sabe cómo procesar la información de Director y construir las respectivas partes de un producto. El ConcreteBuilder también tiene un método getProduct o un método creacional para devolver la instancia Product.

· Product: Los objetos resultantes. Puede definir el producto, bien como una interfaz (preferible) o clase.

Implementación:

· Típicamente hay una clase abstracta Builder (o interfaz) que define una operación para crear cada componente.

· Las clases concretas sobrecargan esas operaciones.

· No hay clase abstracta para el producto debido a que éstos pueden variar mucho.

Colaboraciones:

· El cliente crea el objeto Director y lo configura con el constructor (builder deseado).

· El director le notifica al constructor cada vez que se debe construir una parte del producto.

· El constructor procesa solicitudes del director y agrega partes al producto.

· El cliente obtiene el producto del constructor.

Consecuencias:

· Permite variar la representación interna del producto.

v El objeto constructor provee al director con una interfaz para construir el producto.

· Permite aislar el código de construcción y representación.

· Permite un control fino del proceso de construcción.

v Los objetos son construidos paso por paso.

v Cuando el proceso termina el producto es retribuido.

Patrones relacionados:

· Abstract factory.

· Composite.


Etiquetas: , ,

 
posted by Camilo Mojica at 19:05 | Permalink | 0 comments
Factory Method

Factory Method es un patrón creacional que define una interfaz para crear objetos de tipo genérico permitiendo a las subclases decidir qué tipo de objeto concreto crear.

Características generales de este patrón:

Nombre:

Factory Method.

Proposito:

Definir una interfaz para crear objetos de tipo genérico permitiendo a las subclases decidir qué tipo de objeto concreto crear.

También conocido como:

Constructor Virtual.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Una clase no puede anticipar la clase de objetos que debe crear.

· Se necesita que las subclases especifiquien los objetos a ser creados.

· Las clases delegan responsabilidades a uno de varios ayudantes de subclases, y desea localizar el conocimiento del que la subclase ayudante es delegada.

· Para crear un marco extensible. Esto significa que permite flexibilidad al dejar algunas decisiones, como el tipo específico de objeto a crear, hasta más tarde.

· Tomar una subclase, en lugar de su superclase, para decidir qué tipo de objeto crear.

· Para crear un objeto, pero no qué tipo de objeto.

· Cuando necesita varios constructores sobrecargados con la misma lista de parámetros, que no está permitido en Java. En cambio, use Métodos de fábrica con varios nombres diferentes.


Estructura:

Participantes:

· Product: Define la interfaz de los objetos que puede crear la fábrica.

· ConcreteProduct: Implementa la interfaz Producto.

· Creator: Es la interfaz que define el método de fábrica (factoryMethod):

v Declara el método fábrica que devuelve un objeto de tipo Producto.

v También puede definir una implementación por defecto del método fábrica que devuelve un predeterminado objeto de ConcreteProduct.

· ConcreteCreator: La clase que se extiende de Creador y que ofrece una implementación para el factoryMethod. Este puede devolver cualquier objeto que implemente la interfaz Producto. Anula el método fábrica para devolver una instancia de ConcreteProduct.

Colaboraciones:

Creador se basa en sus subclases para definir el método fábrica para que devuelva una instancia de ConcreteProduct, es decir, Creador delega en las subclases la creación de los objetos.

Consecuencias:

· Eliminan la necesidad de especificar las clases de los objetos creados.

· El código solo trabaja con interfaces.

· Es posible que los clientes tengan que crear una subclase de creador solo para crear un objeto.


patrones relacionados:

· Abstract factory.

· Prototype.

· Template method.

Etiquetas: , , ,

 
posted by Camilo Mojica at 19:01 | Permalink | 0 comments
Singleton

Singleton es un patrón creacional y está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.

Características generales de este patrón:

Nombre:

Singleton.

También conocido como:

Patrón de Instancia única.

Propósito:

Asegurar que una clase tenga una sola instancia y proveer un punto global de acceso a la misma.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Debe haber exactamente una instancia de una clase, y debe ser accesible a los clientes en un punto de acceso conocido.

· Cuando la única instancia debe ser extensible y los clientes deben ser capaces de usar la instancia extendida sin modificar el código.

· Aplique el Singleton cuando quiera sólo una instancia de una clase, pero que esta deba estar disponible en todas partes.


Estructura:


Participantes:

·  Define una operación Instance que permite a los clientes acceder a la única instancia.

·  Puede ser responsable de la creación de su propia y única instancia.

Colaboraciones:

Los clientes acceden a la única instancia a través de la operación Instance.

Consecuencias:

· Acceso controlado a la única instancia.

· Espacio de nombres reducido (no se requieren variables globales).

· Permite refinamiento de operaciones y representación. La clase se puede extender, y es fácil de configurar una aplicación con una instancia de la clase extendida. Se puede configurar en tiempo de ejecución.

· Permite un variable número de instancias. El patrón hace fácil cambiar y permitir más de una instancia de la clase Singleton. Además, permite utilizar el mismo enfoque para controlar el número de instancias que la aplicación utiliza, solo la operación que permite el acceso a la instancia tiene que ser cambiada

· Más flexible que las operaciones de clase.


Implementación:

Para aplicar el patrón Singleton, se requiere:

Singleton - Proporciona un constructor privado, mantiene una referencia privada estática a la única instancia de esta clase, y proporciona un método estático de acceso para devolver una referencia a la única instancia.

El resto de la implementación de la clase Singleton es normal. El método estático de acceso puede tomar decisiones sobre qué tipo de instancia crear, basado en las propiedades del sistema o los parámetros pasados en el método de acceso.

Patrones relacionados:

· Abstract Factory.

· Prototype.

· Builder.


Etiquetas: , ,

 
posted by Camilo Mojica at 18:47 | Permalink | 0 comments
Abstract Factory

Abstract Factory es un patrón creacional que proporciona una interfaz para crear familias de objetos sin especificar su implementación concreta, este utiliza clases abstractas y desacopla la implementación concreta del sistema.

Características generales de este patrón:

Nombre:

Abstract Factory.

Proposito:

Proveer una interfaz para crear familias o relaciones de objetos que dependan entre sí, sin especificar sus clases concretas.

Sinónimos:

Kit o Toolkit.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Un sistema debe ser independiente de cómo sus productos son creados, compuestos y representados.

· Un sistema debe ser configurado con una de múltiples familias de productos.

· Una familia de objetos relacionados es diseñada para ser usada de forma conjunta, y se debe garantizar esa restricción.

· Se quiere proporcionar una librería de clases de productos, y solo revelar sus interfaces más no sus implementaciones.



Participantes:

· AbstractFactory: Declara una interfaz para operaciones que crean objetos de productos abstractos.

·  ConcretedFactory: Implementa las operaciones para crear objetos de productos concretos.

·  AbstractProduct: Declara una interfaz para un tipo de objeto de producto.

· ConcreteProduct: Define un objeto de producto para ser creado por la correspondiente fabrica concreta, implementa la interfaz AbstractProduct.

· Client: usa solo las interfaces declaradas por las clases AbstractFactory y AbstractProduct.

Colaboraciones:

Normalmente se crea una única instancia de una clase concreta en tiempo de ejecución. Esta fábrica crea objetos que tienen determinada interfaz. Para crear objetos diferentes se usar una fábrica diferente

Fábrica abstracta difiere la creación de objetos a las subclases concretas.

Consecuencias:

· Aísla las clases concretas.

· Hace fácil cambiar de familia de productos.

· Promueve la consistencia entre productos.

· Es difícil soportar nuevos tipos de productos.

Implementación:

· Se puede implementar la fábrica como un singleton.

· En la creación de productos.

· La fabrica abstracta solo declara la interfaz de los productos.

· Usar el patrón FactoryMethod.

· Colocar en los métodos create un parámetro que indique lo que se desea crear.

Patrones relacionados:

· Factory Method.

· Prototype.

· Singleton.

Etiquetas: , , ,

 
posted by Camilo Mojica at 18:37 | Permalink | 0 comments