Strategy (Design Pattern): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
 
Beispiel:
 
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:
+
Stell dir eine Person vor, die sich mit ihrem Namen vorstellt: "Hallo, ich bin [Name der Person]". Zuerst spricht sie normal. Aber dann bemerkt sie, dass nicht alle zuhören und ändert sozusagen ihre "Strategie" indem sie durch ein Megaphon spricht. Der entsprechende Java Code könnte etwa so aussehen:
 
<code=java>
 
<code=java>
 
public class Beispiel {
 
public class Beispiel {
Zeile 26: Zeile 26:
 
</code=java>
 
</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:
 
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:
 +
[[Bild:Strategy.jpg]]
 
<code=java>
 
<code=java>
 
public class Person {
 
public class Person {
Zeile 75: Zeile 76:
 
[[Kategorie:Java]]
 
[[Kategorie:Java]]
 
[[Kategorie:Design Pattern]]
 
[[Kategorie:Design Pattern]]
 +
[[Kategorie:Design Patterns]]
 
[[Kategorie:Gang of Four Pattern]]
 
[[Kategorie:Gang of Four Pattern]]

Aktuelle Version vom 13. Oktober 2012, 06:26 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. Aber dann bemerkt sie, dass nicht alle zuhören und ändert sozusagen ihre "Strategie" indem sie durch ein Megaphon spricht. 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: Strategy.jpg <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>