Title: PATRONES DE DISEO
1PATRONESDE DISEÑO
2Patrones de diseño
3Patrones de diseño
4Patrones de diseño
5Patrones de diseño
6Patrones de diseño
7Patrones de diseño
8Patrones de diseño
9Patrones de diseño
10Patrones de diseño
Widget
11Patrones de diseño
12Patrones de diseño
- Descripción de patrones de diseño
- Nombre del patrón y clasificación
- Propósito. Qué hace el patrón?. Para qué
sirve?. Qué problemas de diseño resulte? - Otros nombres
- Justificación
- Aplicabilidad. En que situaciones se debe
utilizar. En que situaciones no se debe utilizar. - Estructura. Representación gráfica (UML)
- Participantes. Clases y objetos que participan y
sus responsabilidades - Consecuencias. Rendimiento, facilidad de
mantenimiento ...
13Patrones de diseño
- Implementación. Consejos, técnicas, asuntos
especÃficos de algunos lenguajes - Código ejemplo
- Ejemplos de uso
- Patrones relacionados
14Patrones de diseño
- Qué problemas resuelven los patrones de diseño?
- Encontrar objetos apropiados
- Determinar la granularidad de los objetos
- Especificar las interfaces de los objetos
- Especificar las implementaciones de los objetos
(Clases) - Implementar mecanismos de reutilización de código
- Herencia versus Composición
- Delegación
15Patrones de diseño
- Tipos de patrones
- Patrones creacionales
- Patrones estructurales
- Patrones de comportamiento
16Patrones de diseño
- Patrones creacionales
- Ayudan a que un sistema sea independiente de cómo
sus objetos son creados - Patrones creacionales de clase. Usan herencia
para variar las clases que son instanciadas - Patrones creacionales de objeto. Delegan la
creación de objetos a otros objetos - Los patrones creacionales contienen conocimiento
de qué clases concretas el sistema usa - Esconden la forma en que los objetos son creados
17Patrones de diseño
- Lo único que el sistema total conoce de los
objetos son sus interfaces - Dan flexibilidad con respecto a
- Qué es creado
- Quién crea los objetos
- Cómo se crean y cuándo
- La configuración puede ser estática (en tiempo de
compilación) o dinámica (en tiempo de ejecución) - Pueden ser competidores o pueden complementarse
18Patrones de diseño
- Ejemplo construir un laberinto para un juego
MapSite
enter()
Room
Wall
Door
Maze
enter() setSide() getSide()
enter()
enter()
isOpen
roomNumber
19Patrones de diseño
- public class MapSite
- public abstract void enter()
-
- public class Room extends mapsite()
- private MapSite sides4
- private int roomNumber
- public Room(int roomNo) ...
- public MapSite getSide(Direction dir) ...
- public void setSide(Direction dir, MapSite
site) ...
20Patrones de diseño
public class Wall extends MapSite public
void enter() ... public class Door extends
Mapsite() public Door(Room r1, Room r2)
... public void enter() ... public
Room otherSideFrom(Room r) ... private
Room room1 private Room room2 private
boolean isOpen
21public class Maze public Maze() ...
public void addRoom(Room r) ... public
Room RoomNo(int n) ... private ...
...
22Public class MazeGame Maze createMaze()
Maze aMaze new Maze() Room r1
new Room(1) Room r2 new Room(2)
Door theDoor new Door(r1, r2)
aMaze.addRoom(r1) aMaze.addRoom(r2)
r1.setSide(Direction.North, new Wall())
r1.setSide(Direction.East, theDoor)
r1.setSide(Direction.South, newWall)
r1.setSide(direction.West, new Wall)
r2.setSide(Direction.North, new Wall())
r2.setSide(Direction.East, new Wall)
r2.setSide(Direction.South, newWall)
r2.setSide(direction.West, theDoor)
return aMaze
23Patrones creacionales
- Abstrac Factory
- Propósito. Proveer una interfaz para crear
familias de objetos relacionados sin especificar
sus clases concretas - Otros nombres. Kit
- Motivación. Ejemplo de interfaces de usuario.
24Patrones creacionales
- Aplicabilidad. Usar este patrón cuando
- Un sistema debe ser independiente de como 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 está diseñada
para ser usados conjuntamente - Se desea proveer una biblioteca de clases de
productos y sólo se desea revelar sus interfaces,
no sus implementaciones
25Patrones creacionales
AbstracProductA
ProductA1
ProductA2
AbstracProductB
ProductB1
ProductB2
26Patrones creacionales
- Participantes
- Abstract Factory (WidgetFactory)
- ConcreteFactory (WindowsFactory, MacFactory)
- AbstractProduct (ScrollBar, Menu)
- ConcreteProduct(WindowsScrollBar, WindowsMenu)
- Client
27Patrones creacionales
- 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.
28Patrones creacionales
- 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
29Patrones creacionales
- Implementación
- Se puede implementar la fábrica como un singleton
- 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
30Patrones creacionales
- Singleton
- Propósito. Asegurar que una clase tiene una sola
instancia y proveer un punto global de acceso a
la misma - Motivación. Hay casos en que solo debe haber un
objeto de una clase print spooler, file system,
window manager - Aplicabilidad. Usar cuando
- Debe haber exactamente una instancia de una clase
- Cuando la única instancia debe ser extendible y
los clientes deben ser capaces de usar la
instancia extendida sin modificar el código
31Patrones creacionales
32Patrones creacionales
- Participantes. Singleton
- Define una operación instance que permite a los
clientes acceder a la única instancia - Puede ser responsable de crear su única instancia
- Colaboraciones
- Los clientes acceden a la instancia única a
través de la operación instance
33Patrones creacionales
- Consecuencias
- Acceso controlado a la instancia única
- Espacio de nombres reducido (no se requieren
variables globales) - Permite refinamiento de operaciones y
representación. La clase se puede extender. - Más flexible que las operaciones de clase
(métodos estáticos).
34Patrones creacionales
- Implementación
- Class Singleton
- private static Singleton instancenull
- public static Singleton instance()
- if (instance null)
- instance new Singleton()
-
- return instance
-
- protected Singleton()
-
35Patrones creacionales
- Factory method
- Propósito. Definir una interfaz para crear
objetos, dejando que las subclases decidan que
clase instanciar. - Motivación
- Aplicabilidad. Usar cuando
- Una clase no puede anticipar la clase de objetos
que debe crear - Se necesita que las subclases especifiquen los
objetos a ser creados
36Patrones creacionales
37Patrones creacionales
- Participantes
- Producto
- ProductoConcreto
- Creador
- CreadorConcreto
- Colaboraciones
- El patrón Creator delega en las subclases la
creación de los objetos.
38Patrones creacionales
- Consecuencias
- Eliminan la necesidad de especificar las clases
de los objetos creados - El código solo trabaja con interfaces
- Desventaja. Es posible que los clientes tengan
que crear una subclase de creador solo para crear
un objeto
39Patrones creacionales
- Implementación
- Posibles implementaciones
- El creador es una clase abstracta
- El creador es una clase concreta
- Métodos fábrica parametrizados
40Patrones creacionales
- Builder
- Propósito. 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 - Motivación. Ejemplo una aplicación que convierte
texto RTF a diferentes formatos texto ascii,
TeX, TextWidget.
41Patrones creacionales
42Patrones creacionales
- Aplicabilidad. Usar cuando
- El algoritmo para crear un objeto complejo debe
ser independiente de las partes que constituyen
el objeto y su ensamblaje - El proceso de construcción debe permitir
representaciones diferentes del objeto
construido. - Participantes
- Builder (TextConverter)
- ConcreteBuilder (ASCIIConverter, TeXConverter,
...) - Director (RTFReader).
- Product (ASCIIText, TeXText)
43Patrones creacionales
- 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
44Patrones creacionales
- Consecuencias
- Permite variar la representación interna del
producto - El objeto constructor provee al director con una
interfaz para construir el producto. - Permite aÃslar el código de construcción y
representación - Permite un control fino del proceso de
construcción. - Los objetos son construidos paso por paso.
- Cuando el proceso termina el producto es
retribuido
45Patrones creacionales
- 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
46Patrones creacionales
- Prototype
- Propósito. Especificar los tipos de objetos a ser
creados usando un prototipo. Crear nuevos objetos
clonando el prototipo - Motivación
47Patrones creacionales
- Aplicabilidad. Usar cuando
- Las clases a instanciar se especifican en tiempo
de ejecución - Para evitar una jerarquÃa de fábricas paralelas a
la jerarquÃa de productos
48Patrones creacionales
49Patrones creacionales
- Participantes
- Prototype
- Concrete prototype
- Client
- Colaboraciones
- Un cliente solicita a un prototipo que se clone a
si mismo
50Patrones creacionales
- Consecuencias
- Consecuencias similares a AbstractFactory
- Se pueden agregar y eliminar productos en tiempo
de ejecución - Menos uso de herencia
- Permite configurar una aplicación con clases
dinámicamente.