Tôi đang cố gắng để hiểu mô hình chiến lược và tự hỏi: lớp bối cảnh phải có hoặc tôi có thể loại bỏ nó mà không ảnh hưởng đến mục đích của mô hình không?
Tôi có ấn tượng rằng tôi cần một loại công tắc để đọc các loại tệp khác nhau nhưng không muốn hack thứ gì đó và sau đó xử lý tái cấu trúc (mặc dù, tất nhiên luôn xảy ra mã có thể được cấu trúc lại nhưng ý tưởng là: thử thông minh nhất có thể trong thiết kế trước đó ...):
Hình ảnh được lấy từ wikidia
Khách hàng có thể ủy quyền trực tiếp cho giao diện Chiến lược không hoặc có điều gì tôi vừa bỏ lỡ để hiểu về lớp ngữ cảnh không?
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();
}
}
Vì vậy, ở trên mô tả là lớp bối cảnh bị thiếu. Liệu mã có tuân thủ mô hình chiến lược?