Strateji modelini anlamaya çalışıyorum ve kendime şu soruyu soruyorum: bağlam sınıfı olmalı mı yoksa kalıbın amacından ödün vermeden dışarıda bırakabilir miyim?
Ben farklı dosya türlerini okumak için bir tür anahtar gerekli izlenim altındaydı ama sadece bir şey kesmek ve daha sonra yeniden düzenleme ile uğraşmak istemiyordu (tabii ki, her zaman her zaman kod yeniden düzenlenebilir olabilir ama fikir oldu: deneyin tasarımda mümkün olduğunca akıllı olmak ...):
Wikimedia'dan alınan görüntü
Müşteri doğrudan Strateji arayüzüne devredebilir mi veya bağlam sınıfı hakkında az önce özlediğim bir şey var mı?
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();
}
}
Yani, yukarıda tasvir edilen bağlam sınıfı eksiktir. Kod strateji modeline uyuyor mu?