Strategy (Design Pattern)
Das Strategy Design Pattern definiert eine Familie von Algorithmen, isoliert jeden einzelnen und macht ihn austauschbar unabhängig von den Clients, die ihn benutzen.
Beispiel:
Stell dir eine Person vor, die sich mit ihrem Namen vorstellt: "Hallo, ich bin [Name der Person]". Zuerst spricht sie normal und dann durch ein Megaphon. Der entsprechende Java Code könnte etwa so aussehen: <code=java> public class Beispiel {
public Beispiel() {
Person person = new Person("Peter");
String text = "'Hallo, ich bin " + person.getName() + "'";
Talking talkingNormally = new TalkingNormally();
person.setTalking(talkingNormally);
person.talk(text);
Talking talkingMegaphone = new TalkingMegaphone();
person.setTalking(talkingMegaphone);
person.talk(text);
}
public static void main(final String args[]) {
Beispiel test = new Beispiel();
}
} </code=java> Mit "setTalking" wird die Sprechart der Person festgelegt, damit sie dann mit "talk" in der richtigen Art spricht. "Talking" ist ein Interface, das ebenfalls eine "talk"-Methode enthält. Das Interface wird von "TalkingNormally" und "TalkingMegaphone" implementiert, um die zwei Sprecharten zu konkretisieren. Die "talk"-Methode der "Person" delegiert einfach an das zuständige "Talking"-Objekt, damit die Person in der gewollten Art spricht: <code=java> public class Person {
private final String name; private Talking talking;
public Person(final String name) {
this.name = name;
}
public String getName() {
return name;
}
public void talk(final String text) {
talking.talk(text);
}
public void setTalking(final Talking talking) {
this.talking = talking;
}
} </code=java> <code=java> public interface Talking {//oder alternativ eine abstrakte Klasse
public void talk(final String text);
} </code=java> <code=java> public class TalkingNormally implements Talking {
@Override
public void talk(final String text) {
System.out.println("Talking normally: " + text);
}
} </code=java> <code=java> public class TalkingMegaphone implements Talking {
@Override
public void talk(final String text) {
System.out.println("Talking with megaphone: " + text);
}
} </code=java>
