Saya mencoba memahami pola strategi dan bertanya pada diri sendiri: apakah kelas konteks harus dimiliki atau dapatkah saya tinggalkan tanpa mengganggu tujuan pola?
Saya mendapat kesan bahwa saya memerlukan semacam saklar untuk membaca berbagai jenis file tetapi tidak ingin meretas sesuatu dan kemudian berurusan dengan refactoring (walaupun, tentu saja selalu terjadi bahwa kode dapat di refactored tetapi idenya adalah: coba menjadi sepintar mungkin dalam desain sebelumnya ...):
Gambar diambil dari wikimedia
Bisakah klien mendelegasikan secara langsung ke antarmuka Strategi atau ada sesuatu yang saya lewatkan untuk mengerti tentang kelas konteks?
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();
}
}
Jadi, yang digambarkan di atas adalah konteks kelas yang hilang. Apakah kode mematuhi pola strategi?