มีวิธีการที่ถูกต้องมากมายในการแก้ปัญหาของคุณ Basile Starynkevitch เสนอวิธีการแบบ“ zero-bureaucracy” ซึ่งจะทำให้คุณมีส่วนต่อประสานที่เรียบง่ายและอาศัยโปรแกรมเมอร์ที่ใช้อินเทอร์เฟซที่เหมาะสม ในขณะที่ฉันชอบวิธีการนี้ฉันจะนำเสนออีกวิธีหนึ่งซึ่งมีประโยชน์มากกว่า แต่ให้คอมไพเลอร์พบข้อผิดพลาดบางอย่าง
ระบุรัฐต่างๆอุปกรณ์ของคุณได้ในขณะที่Uninitialised
,
Started
, Configured
และอื่น ๆ รายการจะต้องมีการ จำกัด ¹
สำหรับแต่ละรัฐกำหนดstruct
ถือข้อมูลเพิ่มเติมที่จำเป็นที่เกี่ยวข้องกับรัฐเช่นDeviceUninitialised
,
DeviceStarted
และอื่น ๆ
แพ็คทรีทเม้นต์ทั้งหมดในวัตถุเดียวDeviceStrategy
ที่เมธอดใช้โครงสร้างที่กำหนดใน 2 เป็นอินพุตและเอาต์พุต ดังนั้นคุณอาจมีDeviceStarted DeviceStrategy::start (DeviceUninitalised dev)
วิธี (หรือสิ่งที่เทียบเท่าอาจเป็นไปตามการประชุมโครงการของคุณ)
ด้วยวิธีนี้โปรแกรมที่ถูกต้องจะต้องเรียกวิธีการบางอย่างในลำดับที่บังคับใช้โดยต้นแบบวิธีการ
รัฐต่าง ๆ เป็นวัตถุที่ไม่เกี่ยวข้องนี่เป็นเพราะหลักการทดแทน หากคุณมีประโยชน์ที่จะให้โครงสร้างเหล่านี้ใช้บรรพบุรุษร่วมกันโปรดจำไว้ว่ารูปแบบผู้เข้าชมสามารถใช้เพื่อกู้คืนประเภทที่เป็นรูปธรรมของอินสแตนซ์ของคลาสนามธรรม
ในขณะที่ฉันอธิบายใน 3. DeviceStrategy
คลาสที่ไม่ซ้ำกันมีสถานการณ์ที่คุณอาจต้องการแยกการทำงานที่ให้ไว้ในหลาย ๆ คลาส
เพื่อสรุปประเด็นสำคัญของการออกแบบที่ฉันอธิบายคือ:
เนื่องจากหลักการการทดแทนวัตถุที่เป็นตัวแทนของสถานะอุปกรณ์ควรชัดเจนและไม่มีความสัมพันธ์ในการสืบทอดพิเศษ
แพ็คอุปกรณ์การรักษาในวัตถุ startegy มากกว่าในวัตถุที่เป็นตัวแทนของอุปกรณ์เพื่อให้แต่ละอุปกรณ์หรือสถานะอุปกรณ์มองเห็นตัวเองเท่านั้นและกลยุทธ์ที่เห็นทั้งหมดของพวกเขาและแสดงการเปลี่ยนแปลงที่เป็นไปได้ระหว่างพวกเขา
ฉันจะสาบานว่าฉันเห็นครั้งหนึ่งมีคำอธิบายเกี่ยวกับการติดตั้งไคลเอ็นต์ telnet ตามบรรทัดเหล่านี้ แต่ฉันไม่สามารถค้นหาได้อีก มันจะเป็นข้อมูลอ้างอิงที่มีประโยชน์มาก!
¹: สำหรับสิ่งนี้ให้ทำตามสัญชาตญาณของคุณหรือค้นหาคลาสที่เทียบเท่าของวิธีการในการใช้งานจริงของคุณสำหรับความสัมพันธ์“ method₁ ~ method₂” iff มันใช้งานได้กับวัตถุเดียวกัน” - สมมติว่าคุณมีวัตถุขนาดใหญ่ห่อหุ้มการรักษาทั้งหมดบนอุปกรณ์ของคุณ ทั้งสองวิธีในการระบุสถานะให้ผลลัพธ์ที่ยอดเยี่ยม
discovery
หรือhandshake
?