Próbuję zrozumieć wzorzec strategii i zadaję sobie pytanie: czy klasa kontekstowa jest niezbędna, czy mogę ją pominąć bez uszczerbku dla celu wzorca?
Miałem wrażenie, że potrzebowałem jakiegoś rodzaju przełącznika do odczytu różnych typów plików, ale nie chciałem po prostu hakować czegoś, a później zajmować się refaktoryzacją (chociaż oczywiście zawsze zdarza się, że kod można refaktoryzować, ale pomysł był taki: spróbuj być jak najbardziej inteligentnym w projekcie ...):
Zdjęcie pochodzi z Wikipedii
Czy klient może delegować bezpośrednio do interfejsu strategii, czy też jest coś, czego mi brakowało, aby zrozumieć klasę kontekstu?
interface Reader {
// read information from file and fill data list field of Client
readFile();
}
class ExcelReader implements Reader{ /* */ }
class PdfReader implements Reader{ /* */}
class Client{
// strategic choice
Reader r;
// data list field
List<Data> data;
// Client Constructor
public Client(){
if(<file ends in .xls>)
r = new ExcelReader();
else
r = new PdfReader();
r.readFile();
}
}
Tak więc powyżej pokazano brak klasy kontekstu. Czy kod jest zgodny ze wzorem strategii?