ฉันพยายามที่จะเข้าใจรูปแบบกลยุทธ์และถามตัวเองว่า: คลาสบริบทต้องมีหรือฉันสามารถละทิ้งมันโดยไม่ลดทอนจุดประสงค์ของรูปแบบ?
ฉันตกอยู่ในความประทับใจฉันต้องการสวิตช์บางอย่างสำหรับอ่านไฟล์ประเภทต่าง ๆ แต่ไม่ต้องการแฮ็กข้อมูลและจัดการกับการรีแฟคเตอร์ใหม่ในภายหลัง (แม้ว่าแน่นอนว่ามันเกิดขึ้นเสมอว่าโค้ดสามารถรีเฟรชได้ แต่ความคิดคือ: ลอง จะฉลาดเท่าที่จะเป็นไปได้ในการออกแบบล่วงหน้า ... ):
ภาพที่นำมาจากวิกิมีเดีย
ลูกค้าสามารถมอบหมายโดยตรงไปยังส่วนต่อประสานกลยุทธ์หรือมีบางสิ่งที่ฉันเพิ่งพลาดที่จะเข้าใจเกี่ยวกับคลาสบริบทหรือไม่
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();
}
}
ดังนั้นภาพที่ปรากฎข้างต้นคือคลาสบริบทหายไป รหัสเป็นไปตามรูปแบบกลยุทธ์หรือไม่