You are on page 1of 6

Alegerea la run-time a algoritmului/functiei care sa fie utilizata pentru procesarea

unor date
Algoritmul se poate alege pe baza unor conditii descrise la executie in functie de
contextul datelor de intrare
Clasa existenta nu trebuie modificata
Utilizarea unei abordari traditionale prin includerea in clasa a tuturor metodelor
posibile, duce la ierarhii complexe ce sunt greu de gestionat. Derivarea adauga
comportament nou doar la compilare.

Strategy componente

Istrategy
Clasa abstracta ce defineste interfata obiectelor ce pot oferi noi
functii/algoritmi de prelucrare
StrategyA
Defineste obiecte ce furnizeaza solutii pt prelucrarea datelor
Obiect
Gestioneaza o referinta de tip Istrategy catre functia care va oferi
functia/algoritmul
Gestioneaza datele contextual ce necesita prelucrare

Strategy avantaje

Alegerea metodei de prelucrare a datelor se face dinamic, la run-time


Este permisa definirea de noi algoritmi independent de modificarile clasei ce
gestioneaza datele
Nu impune limite privind un nr maxim de functii/algoritmi ce pot fi folositi

Animal

-name: String
-height: double
-weight: int
-favFood: String
-speed: double
-sound: String

Bird

Dog

Cant fly

Can fly

<<interface>>
Fly
+String fly();

StrategieDog

StrategieBird

+String fly() {}

+String fly(){}

Animal

<<interface>>
Flys

+strategie: Flys
+setStrategie(strategie: Flys):void

fly():String

+tryToFly():String

Dog

Bird

StrategieDog

StrategieBird

{ Cant Fly }

{ Fly }

strategie=new CantFly();
strategie=new ItFly();

Strategy se aplica atunci cand exista SIMILARITATE intre obiecte.

Modifica abilitatea

package ro.ase.cts;
public class Animal {
private String name;
private double height;
private int weight;
private String favFood;
private double speed;
private String sound;
public Flys strategie;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public String getFavFood() {
return favFood;
}
public void setFavFood(String favFood) {
this.favFood = favFood;
}
public double getSpeed() {
return speed;
}
public void setSpeed(double speed) {
this.speed = speed;
}
public String getSound() {
return sound;
}
public void setSound(String sound) {
this.sound = sound;
}
public String tryToFly()
{
return strategie.fly();
}
public void setStrategie(Flys strategie) {
this.strategie = strategie;
}
}

package ro.ase.cts;
public class Bird extends Animal{
public Bird()
{
super();
setSound("Tweet");
strategie=new ItFlys();
}
}

package ro.ase.cts;
public class Dog extends Animal{
public void digHole()
{
System.out.println("Dug a hole");
}
public Dog()
{
super();
setSound("Bark");
strategie=new CantFly();
}

package ro.ase.cts;
public interface Flys {
public String fly();
}
}

package ro.ase.cts;
public class CantFly implements Flys {
@Override
public String fly() {
return "Can't fly";
}
}

package ro.ase.cts;
public class ItFlys implements Flys{
@Override
public String fly() {
return "Flying High";
}
}

package ro.ase.cts.test;
import
import
import
import

ro.ase.cts.Animal;
ro.ase.cts.Bird;
ro.ase.cts.Dog;
ro.ase.cts.ItFlys;

public class Test {


public static void main(String[] args) {
Animal sparky=new Dog();
Animal tweety=new Bird();
System.out.println("Dog: "+sparky.tryToFly());
System.out.println("Bird: "+tweety.tryToFly());
sparky.setStrategie(new ItFlys());
System.out.println("Dog: "+sparky.tryToFly());
}
}

You might also like