Está en la página 1de 27

INTEGRANTES:

CHOLAN CABANILLAS, ALFREDO



NINATANTA GARCIA, JHON
CURSO:
TECNOLOGIA DE LA PROGRAMACION II
DOCENTE:
YANET VIDAL MELGAREJO
TEMA:
PATRON DE DISEO STRATEGY
GUADALUPE - 2014
PATRN DE
DISEO
STRATEGY
CONCEPTO.
Se clasifica como patrn de comportamiento
porque determina como se debe realizar el
intercambio de mensajes entre diferentes
objetos para resolver una tarea.

Permite mantener un conjunto de algoritmos
de entre los cuales el objeto cliente puede
elegir aquel que le conviene e intercambiarlo
dinmicamente segn sus necesidades.

Facilita la implementacin de distintas
estrategias o comportamientos especficos en
clases hijas a travs de una clase comn.

En tiempo de ejecucin y en funcin de algn
parmetro como el tipo de instancia, se
ejecutar la estrategia concreta para esa
situacin.
COMPONENTES DE PATRN DE
DISEO STRATEGY.
VENTAJAS
Permite definir familias de algoritmos
relacionados, agrupar funciones y facilitar la
reutilizacin del cdigo.

Este patrn permite que el comportamiento
cambie dinmicamente, en tiempo de
ejecucin.

Elimina el uso de sentencias condicionales, cuyo
abuso hace difcil de leer el cdigo.
DESVENTAJAS.
Los clientes deben conocer la existencia de las
distintas estrategias.

Si los clientes ignoran las estrategias o les resultan
indiferentes, el uso del patrn resulta inapropiado.

Incrementa el nmero de objetos que pueden
ejecutarse en una aplicacin.

CLASIFICACIN DEL PATRON
Propsito

Define una familia de
algoritmos, encapsula
cada uno de ellos y los
hace intercambiables.
Permite que un
algoritmo vari
independientemente
de los clientes que lo
usan.

Motivacin

Codificar algoritmos
en las clases que las
usan.
Dividir lneas en un flujo
de texto

APLICABILIDAD:

Use el patn Strategy para evitar exponer
estructuras de datos complejas y dependientes
del algoritmo


ESTRUCTURA
Usa el patrn Strategy
cuando:

Varias clases
relacionadas slo
difieren en su
comportamiento.
Strategy permite
configurar a una clase
con uno de entre varios
comportamientos

Se necesiten variantes del
mismo algoritmo, que se
implementan como una
jerarqua de clases
Una clase define muchos
comportamientos que
aparecen en sentencias
condicionales mover
los relacionados a un
strategy.

PARTICIPANTES
Estrategia (Componedor)
Declara la interfaz comn a todos los algoritmos
permitidos.

El *contexto* usa esa interfaz para llamar al
algoritmo definido por una estrategia

Estrategia Concreta
Implementa el algoritmo concreto.

Contexto
Instancia un objeto Estrategia Concreta
Mantiene una referencia la un objeto estrategia
(concreta).
Puede definir una interfaz que permita a la
Estrategia (concreta) acceder a sus datos.

COLABORACIONES

Mediante parmetros en los mtodos de la
estrategia.
Mandndose, el contexto, a s mismo a la
estrategia.
Los clientes del contexto lo configuran con una
estrategia concreta. A partir de ah, solo se
interacta con el contexto.

CONSECUENCIAS
Ayuda a eliminar sentencias condicionales
Facilita la comprensin, mantenimiento y extensin.
Adems permite cambiar el algoritmo
dinmicamente

Familias de algoritmos relacionados: Las jerarquas
de clases Estrategia definen una familia de
algoritmos o comportamientos

Una alternativa a la herencia: La herencia ofrece
otra forma de permitir una variedad de algoritmos o
comportamientos.

Las estrategias eliminan las sentencias
condicionales: El patrn estrategia ofrece una
alternativa a las sentencias condicionales para
seleccionar el comportamiento deseado.

Los clientes deben conocer las diferentes
estrategias: el patrn tiene el inconveniente potencial
de que un cliente debe comprender como difieren
las Estrategias antes de seleccionar la adecuada.

Costes de comunicacin entre Estrategia y
Contexto: La interfaz de Estrategia es compartida por
todas las clases Estrategia Concreta

Mayor numero de objetos: Las estrategias aumentan
el nmero de objetos de una aplicacin.

IMPLEMENTACION
Definicin de la comunicacin entre
Contexty Strategy, el contexto pasa
sus datos como argumentos de las
operaciones de la estrategia: bajo
acoplamiento, posible paso de
parmetros innecesarios
El contexto se pasa asimismo como
argumentos: alto acoplamiento

Configurar el contexto con una estrategia si
la estrategia se puede usar un tiempo de
compilacin . Si la estrategia no va a cambiar
en tiempo de ejecucin.

Comportamiento por defecto en el contexto,
creo y utilizo un objeto estrategia solo es
necesario.
Pasar como parmetro la informacin necesaria
para la estrategia implica un bajo acoplamiento y la
posibilidad de envo de datos innecesarios.
Pasar como parmetro el contexto y dejar que la
estrategia solicite la informacin que necesita
supone un alto acoplamiento entre ellos.
Mantener en la estrategia una referencia al
contexto.
EJERCICIO DEL PATRON PATRN
DE DISEO STRATEGY
public abstract class EstrategiaDibujo extends JFrame
{
private float[] _x,_y;
private Color _c;
private int _ancho,_alto;
public EstrategiaDibujo() {
}
public abstract void dibujar(float[] px, float[] py);
}
public class EstrategiaDibujoConcreta1 extends
EstrategiaDibujo{
public void dibujar(float[] px, float[] py){ ... }
}
public class EstrategiaDibujoConcreta2 extends
EstrategiaDibujo{
public void dibujar(float[] px, float[] py){ ... }
}
Lo importante de esta clase es que cada una de
las estrategias que diseemos tendr que
sobrescribir el mtodo dibujar() y proveer un
algoritmo concreto para dicha estrategia:
public class CreadorDibujos {
private EstrategiaDibujo _estrategia;
private float[] _x,_y;
public CreadorDibujos() { // Establecer estrategia por
defecto.
} public void establecerDibujoBarras() {
_estrategia = new EstrategiaDibujoConcreta1();
} public void establecerDibujoLineas() {
_estrategia = new EstrategiaDibujoConcreta2();
} public void dibuja() {
_estrategia.dibujar(_x,_y); }
}

public class Main {
public static void main(String args[]) { //Usamos la estrategia A
Strategy estrategia_inicial = new StrategyA();
Context context = new Context(estrategia_inicial);
context.some_method(); //Decidimos usar la estrategia B
Strategy estrategia2 = new StrategyB();
context.setStrategy(estrategia2);
context.some_method(); //Finalmente,usamos de nuevo la estrategia A
context.setStrategy(estrategia_inicial);
context.some_method();
/** Salida:
* Estrategia A
* Estrategia B
* Estrategia A
**/ }
}
CONCLUCIONES

También podría gustarte