Professional Documents
Culture Documents
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
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();
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;