Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Diseño de Software – Observer, State y Visitor (página 2)




Enviado por Pablo Turmero



Partes: 1, 2, 3

Monografias.com
11
Observer
Implementación
Al registrar un observer es posible asociarle el evento sobre el que quiere ser notificado.

attach(Observer obs, Evento interes);

Cuando las relaciones de dependencia entre subjects y observers son complicadas encapsular la semántica de actualización en una clase ManejadorCambio (Mediador).
En Smalltalk, las interfaces de las clases Subject y Observer se definen en la clase Object.

Monografias.com
12
Observer en Java
public class Observable {
private boolean changed = false;
private Vector obs;
public Observable() {
obs = new Vector();
}
public synchronized void addObserver (Observer o) {..}
public synchronized void deleteObserver (Observer o) {..}
public void notifyObservers (Object arg) {..}
protected synchronized void setChanged() {..}
protected synchronized void clearChanged() {..}
public synchronized boolean hasChanged() {.. }

Monografias.com
13
Observer en Java

public interface Observer {
void update (Observable o, Object arg);
}
Argumento pasado al método notifyObservers, puede indicar el tipo de cambio

Monografias.com
14
Observer en Java
Problema
Que la clase que deseamos que actúe como Observable ya herede de otra clase: ¡En Java no hay herencia múltiple!
Usar delegación
Una clase ConcreteSubject contendrá a un objeto de una clase que heredará de Observable, y tendrá implementaciones “wrapper” de addObserver y deleteObserver.
Se delega el comportamiento que necesita ConcreteSubject al objeto Observable que contiene.
¿Por qué una subclase de Observable?

Monografias.com
15
Modelo de Eventos de Java 1.1
Java 1.1 introdujo un nuevo modelo de eventos basado en el patrón Observer.
Objetos que pueden generar eventos son llamados fuentes de eventos (event sources).
Objetos que desean ser notificados de eventos son llamados oyentes de eventos (event listeners).
Una fuente juega el papel de ConcreteSubject y un listener juega el papel de ConcreteObserver.
Los listeners deben registrarse en las fuentes.
Un listener debe implementar una interfaz que proporciona los métodos que deben ser llamados por la fuente para notificar un evento.

Monografias.com

Monografias.com
17
Modelo de Eventos de Java 1.1
Es un modelo no orientado a eventos de componentes GUI.
Hay 11 interfaces listener cada una apropiada para un diferente tipo de evento GUI:
ActionListener, ItemListener, KeyListener, MouseListener, WindowListener, …
En algunos casos la interfaz listener incluye más de un método: Java proporciona adaptadores

Monografias.com
18
Modelo de Eventos de Java 1.1
public class CounterView extends Frame {
private TextField tf = new TextField(10);
private Counter counter; // referencia al modelo
public CounterView(String title, Counter c) {
super(title); counter = c;
Panel tfPanel = new Panel();

Button incButton = new Button("Increment");
incButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
counter.incCount();
tf.setText(counter.getCount() + ""); } } );
buttonPanel.add(incButton);

Monografias.com
19
Modelo de Eventos de Java 1.1
Si creamos dos instancias de CounterView para el mismo objeto contador, ¿Qué debemos hacer para que un cambio en el valor de contador en una de ellas afecte a la otra?

public class ObservableCounter extends Observable {
private int count;
public ObservableCounter(int count) { this.count = count; }
public int getCount() { return count; }
public void incCount() {
count++;
setChanged();
notifyObservers(); }
… }

Monografias.com
20
Modelo de Eventos de Java 1.1
public class ObservableCounterView extends Frame {
private ObservableCounter counter;
private TextField tf = new TextField(10);
public ObservableCounterView(String title,
ObservableCounter c) {
super(title); counter = c;
counter.addObserver(new Observer() {
public void update(Observable src, Object obj) {
if (src == counter) {
tf.setText(((ObservableCounter)src).getCount() + "");}
} } );

Monografias.com
21
State (Estado)
Propósito
Permite a un objeto cambiar su comportamiento cuando cambia su estado. El objeto parece cambiar de clase.
Motivación
Una conexión TCP puede encontrarse en uno de varios estados, y dependiendo del estado responderá de un modo diferente a los mensajes de otros objetos para solicitudes tales como abrir, cerrar o establecer conexión.

Monografias.com
22
Estado
Motivación

Monografias.com
23
Estado
Estructura

Monografias.com
24
Estado
Aplicabilidad
El comportamiento del objeto depende de su estado, y debe cambiar su comportamiento en tiempo de ejecución dependiendo de su estado.
Las operaciones tienen grandes estructuras CASE que dependen del estado del objeto, que es representado por uno o más constantes de tipo enumerado.

Monografias.com
25
Estado
Consecuencias
Coloca todo el comportamiento asociado a un particular estado en una clase.
Subclases vs. Sentencias CASE.
Ayuda a evitar estados inconsistentes
Transiciones de estado son más explícitas.
Incrementa el número de objetos
Los objetos estado pueden ser Singleton.

Monografias.com
26
Estado
Implementación
¿Quién define las transiciones entre estados? Contexto o subclases estado.
Una alternativa es definir tablas que representan la matriz de transiciones de estado: no es posible asociar acciones a los cambios de estado y más difícil de comprender.
¿Cuándo son creados los objetos estado? Pueden crearse cuando se necesiten o con antelación y que Contexto tenga una referencia a ellos.

Monografias.com
27
Strategy/Policy (Estrategia)
Propósito
Define una familia de algoritmos, encapsula cada uno, y permite intercambiarlos. Permite variar los algoritmos de forma independiente a los clientes que los usan
Motivación
Existen muchos algoritmos para justificación de texto, ¿debe implementarlo el cliente que lo necesita?

Monografias.com
28
Estrategia
Motivación

Monografias.com
29
Estrategia
Estructura

Monografias.com
30
Estrategia
Aplicabilidad
Configurar una clase con uno de varios comportamientos posibles.
Se necesitan diferentes variantes de un algoritmo.
Una clase define muchos comportamientos que aparecen como sentencias CASE en sus métodos.

Partes: 1, 2, 3
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter