A strategy tervezési minta

Bejegyzés dátuma:
2011-07-14

A minta célja:

Egy algoritmus családot határoz meg, amelyben az algoritmusokat egyenként egységbe zárjuk és felcserélhetővé tesszük, vagy az algoritmusnak összetett adatszerkezetei vannak, amelyeket egységbe akarunk zárni. Egy osztály viselkedésének megváltoztatása nem származtatással lesz megvalósítva, hanem interfészen keresztül. A módosított osztályok pedig megvalósítják ezt az interfészt. Ez a gyakorlatban azért jó, mert az osztály viselkedését úgy tudjuk megváltoztatni, hogy bámilyen kódot mélyebben módosítani kellene. Ehelyett dinamikusan futási időben vagy statikusan tervezéskor ki tudjuk cserélni az adott osztályra mutató referenciát.
 
Strategy

Gyakorlati példák:

  1. Form mezők validálása: Van egy validátor ősosztályunk és a különböző típusú beviteli mezők validálását megvalósító osztályok a stratégiai interfészen keresztül megvalósítják a konkrét algoritmus metódusokat. Pl: jelszó validátor, név validátor, telefonszám validátor stb ...
  2. Esemény naplózása: Van egy Log osztályunk, aminek az eredeti metódusa a különböző üzeneteket egy fájlba írja. Az idők folyamnán viszont szeretnénk kiterjeszteni a működését és azt szeretnénk, hogy adatbázisba is írjon vagy különböző formátumokba is legyen lehetőség naplózni. (XML, HTML, String)
  3. Objektumok rendezése: Van egy Objektum gyűjteményünk, amit különböző módszerek szerint szeretnénk rendezni. Az egyes rendezési megoldásokat különböző osztályok valósítják meg. Ez inkább elméleti példa, a gyakorlatban általában csak demonstrációs céllal alkalmazhatunk ilyet.
  4. Termékek árazása: Van egy feltételezett rendszerünk, ahol termékek vannak és ezeknek a végső árának a meghatározása több dologtól függenek és többféle kiszámítási módszer létezik. Ebben az esetben is hasznos lehet egy stratégiai minta, így az árképzési logikát jól el tudjuk különíteni a többi funkciótól.

Ezeken kívül számtalan gyakorlati megvalósítás létezhet és ezek a konkrét feladattól és tervtől függenek. Az előbb említettek csak néhány megvalósítási példa volt.