Strategy (Design Pattern): Unterschied zwischen den Versionen
K |
K |
||
Zeile 75: | Zeile 75: | ||
[[Kategorie:Java]] | [[Kategorie:Java]] | ||
[[Kategorie:Design Pattern]] | [[Kategorie:Design Pattern]] | ||
+ | [[Kategorie:Gang of Four Pattern]] |
Version vom 9. Januar 2012, 13:45 Uhr
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>