Você está na página 1de 48

Creational Patterns

132567
Software Embebido
Dependencias entre Software y Hardware
Benjamn Zamudio Olgun
Introduccin

Los modelos del diseo de Creacional abstraen el proceso de instanciacin.


Ayudan a hacer a el sistema independiente de cmo sus objetos se crean,
formen y representen.
La clase creacional hace uso del modelo de herencia para variar la clase
instanciada, mientras que un objeto creacional delegar la instanciacion a
otro objeto.
En este caso, nos vamos a concentrar en los patrones creacionales, estos
patrones buscan en cierta forma "despreocupar" al sistema de como sus
objetos son creados o compuestos.
Los patrones son:
Abstract Factory, permite trabajar con objetos de diferentes familias de
manera que no se mezclen entre s. De esa manera se consigue la el tipo de
familia que se est utilizando sea transparente.
Builder, abstrae el proceso de creacin de los objetos complejos,
centralizandolo en pun punto.
Factory Method, centraliza en una clase constructora la creacin de objetos
de un tipo determinado. Ocultando al invocante la necesidad de indicar un
tipo u otro.
Prototype, crea un objeto a partir de la clonacin de un objeto ya existente.
Singleton, garantiza que solo exista una instancia de un objeto y que la forma
de acceder a dicha instancia sea general.
Abstract Factory

El patrn Abstract Factory o Fbrica Abstracta resuelve el problema de crear


familias de objetos.
El patrn Abstract Factory nos permite crear, mediante una interfaz,
conjuntos o familias de objetos (denominados productos) que dependen
mutuamuente y todo esto sin especificar cual es el objeto concreto.
Que usos tiene el patrn Abstract
Factory?
Este patrn se puede aplicar cuando:
Un sistema debe ser independiente de como sus objetos son creados.
Un sistema debe ser 'configurado' con una cierta familia de productos.
Se necesita reforzar la nocin de dependencia mutua entre ciertos objetos.
Estructura del Patrn Abstract Factory
Elementos del Patrn Abstract Factory

FabricaAbstracta*: Define un conjunto de mtodos (interfaz) para la creacin


de productos abstractos. FabricaConcreta1/2: Implementa la interfaz de la
FabricaAbstracta para la creacin de los distintos productos concretos.
ProductoAbstractoA*/B*: Define la interfaz de los objetos de tipo
ProductoA/B.
ProductoConcretoA1/A2/B1/B2: Implementan su respectiva interfaz
representando un producto concreto.
Pros/Contras del Patrn Abstract
Factory
+ Brinda flexibilidad al aislar a las clases concretas.
+ Facilita cambiar las familias de productos.
- Para agregar nuevos productos se deben modificar tanto las fabricas
abstractas como las concretas.
Ejemplo del Patrn Abstract Factory

Teniendo en cuenta la siguiente jerarqua de clases, la cual trata de


representar muy por arriba dos familias de productos (DVD y BluRay) cada uno
con un par de variantes (simple y doble capa) para que permiten mostrar
diferentes aspectos a tener en cuenta a la hora de usar este patrn.
Vamos a construir un AbstractFactory que nos permita crear discos de DVD o
BluRay de simple y doble capa usando el siguiente diseo:
Builder

Permitir que el cdigo cliente controle el proceso de construccin de los


objetos.
Tambin conocido como Simple Factory, hace parte del grupo de patrones
de diseo creacionales de GOF.
Es un patrn que delega a una clase la tarea de construir instancias de otras.
Se usa normalmente cuando el proceso de fabricacin es complejo, por lo que
es mejor centralizarlo en un solo punto.
Otros patrones ms avanzados se pueden confundir con este: Abstract Factory
y Factory Method.
Este tipo de diseo vincula el proceso de construccin de un objeto a sus
componentes, enfoque adecuado cuando el objeto en construccin es simple,
definido y siempre produce la misma representacin. No obstante, cuando en
el proceso de construccin del objeto se tienen varios pasos que pueden
implementarse de diversas maneras produciendo diversas representaciones
del objeto (polimorfismo), este tipo de diseo no es adecuado.

Adicionalmente, debido a que las diferentes implementaciones del proceso de


construccin se mantienen dentro del objeto, este puede llegar a ser
voluminoso, menos modular y la adicin de nuevas implementaciones y
cambios requieren cambios del cdigo existente.
El proceso de construccin de objetos de este tipo se puede lograr de manera
ms eficaz utilizando el patrn Builder, que sugiere mover la lgica de
construccin fuera del objeto en una clase separada llamada clase
constructora (Builder class).
Para diferentes representaciones de un objeto, puede haber diversas clases
constructoras implementando series diferentes de pasos de construccin, lo
cual reduce el tamao de un objeto. Adems se obtiene:
Un diseo ms modular debido a que cada implementacin es contenida en un
objeto constructor diferente.
- Mayor facilidad en la adicin de nuevas implementaciones a travs de
nuevos builders.
- Independencia del proceso de construccin de objetos respecto a
proporcionando un mayor control sobre el proceso de construccin.
Ventajas

Reduce el acoplamiento.
Permite variar la representacin interna de estructuras compleja, respetando
la interfaz comn de la clase Builder.
Permite un mayor control en el proceso de creacin del objeto. El Director
controla la creacin paso a paso, solo cuando el Builder ha terminado de
construir el objeto lo recupera el Director.
Diagrama
Cliente: Parte del programa que utilizar el resto de clases. Podra ser el
archivo .fla principal, por ejemplo.
Director: Clase que decide qu constructor se utiliza y cuando se debe
construir el producto. Se correspondera con la clase Cocina de nuestro
ejemplo.
IConstructor: Interfaz que define las funciones de creacin de cada parte del
producto y la funcin de obtencin del producto resultante. En nuestro
ejemplo se correspondera con Cocinero y definira las funciones
hacerMasa():void, utilizarSalsa():void y hacerRelleno():void.
Constructor1 y Constructor2: Clases encargadas de crear las partes del
producto. En nuestro ejemplo, seran CocineroHawai y CocineroPicante.
Producto: Clase del producto en s. Se correspondera con la clase Pizza de
nuestro ejemplo.
Factory Method

Libera al desarrollador sobre la forma correcta de crear objetos. Define la


interfaz de creacin de un cierto tipo de objeto, permitiendo que las
subclases decidan que clase concreta necesitan instancias.
Muchas veces ocurre que una clase no puede anticipar el tipo de objetos que
debe crear, ya que la jerarqua de clases que tiene requiere que deba delegar
la responsabilidad a una subclase.
Caracterstticas

Clasificacin: Generacional
Se conoce como Virtual constructor
Hace que un diseo sea ms personalizable. El mtodo de fbrica slo
requiere una nueva operacin.
Cundo debe ser utilizado?

Una clase no puede anticipar el tipo de objeto que debe crear y quiere que
sus subclases especifiquen dichos objetos
Hay clases que delegan responsabilidades en una o varias subclases.
Una aplicacin es grande y compleja y posee muchos patrones creacionales
Estructura

Creator: Declara el mtodo de fabricacin (creacin), que devuelve el objeto


de tipo Product.
ConcreatCreator: redefine el mtodo de fabricacin para devolver un
producto.
ProductoConcreto: es el resultado final. El creador se apoya en sus subclases
para definir el mtodo de fabricacin que devuelve el objeto apropiado
Como ventaja se destaca que elimina la necesidad de introducir clases
especficas en el cdigo del creador. Solo maneja la interfaz Product, por lo
que permite aadir cualquier clase ConcretProduct definida por el usuario.
Por otro lado, es ms flexible crear un objeto con un Factory Method que
directamente: un mtodo factora puede dar una implementacin por defecto
Permite encapsular el conocimiento referente a la creacin de objetos
Inconveniente:

se obliga al cliente a definir subclases de la clase Creador slo para crear


un producto concreto y esto puede no ser apropiado siempre
Ejemplo

public interface Factory {


public abstract void methodOne();
public abstract void methodTwo();
}
public class FirstClass implements Factory{
public void methodOne(){
System.out.println("Metodo uno de FirstClass.");
}
public void methodTwo(){
System.out.println("Metodo dos de FirstClass.");
}
}
public class SecondClass implements Factory{
public void methodOne(){
System.out.println("Metodo uno de SecondClass.");
}
public void methodTwo(){
System.out.println("Metodo dos de SecondClass.");
}
}
public class ClaseDePueba {
private static Factory claseUno;
private static Factory claseDos;
public static void main(String[] args){
claseUno = new FirstClass();
claseDos = new SecondClass();
claseUno.methodOne();
claseDos.methodTwo();
}
}
Prototype

El patron de diseo prototipo, es un patron de diseo creacional el cual se


encarga de facilitar la vida del programador, evitando que ste cree objetos
de ceros.

La palabra clave de este patron es Clonar.


Para que sirve?

El patron prototipo propone hacer "reciclaje" de herencia, para evitar que dos
objetos que difieren en pocas caracteristicas, tengan que estar definidas
como dos clases concretas diferentes.
Este patron clona un objeto previamente instanciado, tomando cada una de
las caracteristicas del objeto inicial.
En que momentos se usa?

Este patron se usa en casos de tipificacion de objetos.


Ejemplo:
Avion de turismo
Avion de guerra
Avion privado
Los tres tipos de avion, comparten un 90% de caracteristicas, as pues el
patron permite clonar cada uno de un objeto inicial, modificando unicamente
un 10% de sus caracteristicas.
DoClone()

Este metodo se encarga de crear y retornar una copia del objeto


referenciado.
Cliente: Parte del programa que utilizar las fbricas y productos. Podra ser
el archivo .fla principal, por ejemplo.

IPrototipo: Interfaz que define el mtodo clonar():IPrototipo. En nuestro


ejemplo podra ser una clase llamada IObjetoGrafico.

Prototipo1 y Prototipo2: Las diferentes clases que implementarn el mtodo


de clonacin. Se corresponderan con la clases Circulo y Cuadrado de nuestro
ejemplo.
Singleton

El patrn Singleton se utiliza para no permitir que existan mltiples


instancias de una clase, sino solamente una.
Provee una sola instancia de un objeto para una determinada clase.
Cliente: Parte del programa que utilizar las fbricas y productos. Podra ser
el archivo .fla principal, por ejemplo.

Singleton: Clase que se quiere instanciar una sola vez. Se corresponde con la
clase VentanaAyuda de nuestro ejemplo.
USO DEL PATRON SINGLETON

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

Se requiere de un acceso estandarizado y conocido pblicamente.


El constructor es declarado como privado para prohibir crear mltiples
instancias de esta clase.

Lo nico para acceder a la clase es a travs del mtodo getInstance que


internamente instancia una sola vez el objeto que se utilizar en todo el
programa, y el resto de las veces retorna una referencia a la nica instancia
de la clase.
CLASE SINGLETON

package singleton;
public class MySingleton {
protected static MySingleton InstanciaUnica= null;//unica instancia
protected String variable;
public static MySingleton getInstance() {
if(InstanciaUnica == null) {
synchronized (MySingleton.class) {
InstanciaUnica = new MySingleton();
}
}
return InstanciaUnica;
}
//Constructor privado para prohibir la creacin de instancias de esta clase.
private MySingleton() {
variable ="PROGRAMACION AVANZADA";
}
public void setSingleton(String value) {
this.variable = value;
}
public void printSingleton() {
System.out.println(variable);
}
}
CLASE DE PRUEBA

package singletonClases;
import singleton.MySingleton;
public class ClaseDePrueba {
public static void main(String[] args) {
MySingleton mySingleton = MySingleton.getInstance();
mySingleton.printSingleton();
mySingleton.setSingleton("Patron creacional Singleton!!");
MySingleton segundoSingleton = MySingleton.getInstance();
segundoSingleton.printSingleton();
}
}
https://sites.google.com/site/juliocsierraguc/patrones-creacionales

Você também pode gostar