patrones de diseño

Páginas: 10 (2429 palabras) Publicado: 10 de noviembre de 2013
Patrones de Diseño
Patrones de creación

Técnicas de Programación - Curso 2008/09
(Esther Guerra Sánchez)

Patrones de creación
Introducción
Abstraen el proceso de instanciación
Encapsulan conocimiento sobre qué clases
concretas utiliza el sistema
Independizan al sistema del modo en que se
crean, componen y representan los objetos
Flexibilizan el qué, quién, cómo y cuándo
Factorymethod (patrón de creación de clase)
Abstract factory (patrón de creación de objeto)
Singleton (patrón de creación de objeto)

Patrones de creación
Ejemplo: laberinto
sides
4

Room
Maze
+ addRoom()
+ roomNumber()

rooms

- roomNumber
+ enter()
+ setSide()
+ getSide()

MapSite
+ enter()

Wall
+ enter()

Door
- isOpen
+ enter()

Patrones de creación
Ejemplo:laberinto
public enum Direction {
NORTH,
SOUTH,
EAST,
WEST
}
public abstract class MapSite {
abstract void enter();
}
public class Room extends MapSite {
private int _roomNumber;
private MapSite _sides[]=new MapSite[4];
Room () {}
Room (int n) { _roomNumber = n; }
MapSite getSide (Direction dir) {
return _sides[dir.ordinal()];
}
void setSide (Direction dir, MapSite s){}
void enter() {}}

public class Wall extends MapSite {
Wall () {}
void enter() {}
}
public class Door extends MapSite {
private Room _room1;
private Room _room2;
private boolean _isOpen;
Door (Room r1, Room r2) {}
void enter() {}
Room otherSideFrom (Room r1) {}
}
public class Maze {
Maze() {}
void addRoom (Room r) {}
Room RoomNumber (int n) { }
}

Patrones de creación
Ejemplo: laberintopublic class MazeGame {
Maze createMaze () {
Maze aMaze = new Maze();
Room r1 = new Room(1);
Room r2 = new Room(2);
Door aDoor = new Door(r1, r2);
aMaze.addRoom(r1);
aMaze.addRoom(r2);
r1.setSide(Direction.NORTH,
r1.setSide(Direction.EAST,
r1.setSide(Direction.SOUTH,
r1.setSide(Direction.WEST,
r2.setSide(Direction.NORTH,
r2.setSide(Direction.EAST,
r2.setSide(Direction.SOUTH,r2.setSide(Direction.WEST,
return aMaze;
}
}

new Wall());
aDoor);
new Wall());
new Wall());
new Wall());
new Wall());
new Wall());
aDoor);

Patrones de creación
Ejemplo: laberinto
public class MazeGame {
Maze createMaze () {
Maze aMaze = new Maze();
Room r1 = new Room(1);
Room r2 = new Room(2);
Door aDoor = new Door(r1, r2);
aMaze.addRoom(r1);
aMaze.addRoom(r2);r1.setSide(Direction.NORTH,
r1.setSide(Direction.EAST,
r1.setSide(Direction.SOUTH,
r1.setSide(Direction.WEST,
r2.setSide(Direction.NORTH,
r2.setSide(Direction.EAST,
r2.setSide(Direction.SOUTH,
r2.setSide(Direction.WEST,
return aMaze;
}
}

new Wall());
aDoor);
new Wall());
new Wall());
new Wall());
new Wall());
new Wall());
aDoor);

Largo: cuatro llamadas a
setSide por habitación.
Podemosinicializar la
habitación en el constructor
Poco flexible:
• otras formas de laberinto?
• cambiar método
• añadir nuevo método
• otros tipos de laberinto?

Patrones de creación
Ejemplo: laberinto
public class MazeGame {
Maze createMaze () {
Maze aMaze = new Maze();
Room r1 = new Room(1);
Room r2 = new Room(2);
Door aDoor = new Door(r1, r2);
aMaze.addRoom(r1);
aMaze.addRoom(r2);r1.setSide(Direction.NORTH,
r1.setSide(Direction.EAST,
r1.setSide(Direction.SOUTH,
r1.setSide(Direction.WEST,
r2.setSide(Direction.NORTH,
r2.setSide(Direction.EAST,
r2.setSide(Direction.SOUTH,
r2.setSide(Direction.WEST,
return aMaze;
}
}

new Wall());
aDoor);
new Wall());
new Wall());
new Wall());
new Wall());
new Wall());
aDoor);

Factory method: funciones
de creación en vez deconstructores => cambiar
el tipo de lo que se crea
mediante redefinición
Abstract factory: objeto
para crear los objetos =>
cambiar el tipo de lo que
se crea recibiendo un
objeto distinto
Singleton: un único objeto
laberinto en el juego

Factory method
Propósito
Define una interfaz para crear un objeto, pero
dejando en manos de las subclases la decisión
de qué clase concreta...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Patrones De Diseño
  • Patrones de Diseño
  • patrones de diseño
  • Patrones De Diseño
  • patron de diseño
  • Patrones de Diseño
  • Patrones de Diseño
  • Patrones De Diseño

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS