Strategy Pattern
Strategy Pattern face parte din categoria Behavioral Patterns și definește o familie de algoritmi încapsulați cu scopul de a face acești algoritmi interschimbabili. Strategy permite modificarea unui algoritm independent de clasa care-l folosește.
Pentru a înțelege mai bine să luăm un exemplu:
Dorim să dezvoltam o clasă Duck cu ajutorul căreia să creem o varietate largă de rațe. Trebuie să avem în vedere că toate rațele înoată, arată diferit, nu toate zboară, iar sunetul pe care îl fac nu este asemănător, chiar unele nu fac deloc sunet. Să nu uităm și faptul că trebuie să avem posibilitatea de a adăuga un nou tip de rață fără să modificăm celelalte clase.
1. inițial creem o clasă abstractă Duck ce v-a cuprinde proprietățile și metodele comune tuturor rațelor
public abstract class Duck {
public Duck() {}
// metoda ce v-a fi declarata in subclasele ce extind aceasta clasa
// datorita faptului ca ratele nu arata la fel
public abstract void display();
// toate ratele inoata
public void swim() {
System.out.println("inot");
}
}
Abstract Class vs Interface
Nu de puține ori m-am întrebat: care este diferența dintre o clasă abstractă și o interfață ? sau când se folosește o clasă abstractă și când o interfață ?
În cele ce urmează am să încerc să răspund la aceste două întrebări.
Ce sunt ?
O interfață grupează mai multe metode și date membre publice. Sunt definite doar prototipurile metodelor, implementările urmând a fi scrise în clasa care va implementa respectiva interfață.
O clasă abstractă conține cel puțin o metodă neimplementată (metodă abstractă), ce urmează a fi implementată de o subclasă.
Factory Patterns
Factory este unul dintre cele mai folosite patterns și este un obiect ce creează alte obiecte, cu alte cuvinte creem obiecte fără a specifica exact clasa obiectului. Factory pattren face parte din categoria Creational Patterns și-l găsim sub două forme: Factory Method și Abstract Factory.
Factory Method definește o interfață responsabilă cu crearea obiectelor, dar subclasele decid ce clasă este instanțiată.
Abstract Factory definește o interfață pentru crearea unei familii de obiecte legate sau dependente, specializate în rezolvarea aceleași probleme dar în moduri diferite și fără să se specifice concret clasele acelor obiecte.