อินเตอร์เฟซ
เป็นการยากที่จะเข้าใจวัตถุประสงค์ของเครื่องมือที่แก้ปัญหาที่คุณไม่เคยมี ฉันไม่เข้าใจอินเทอร์เฟซนานหลังจากฉันเริ่มเขียนโปรแกรม เราจะเข้าใจสิ่งที่พวกเขาทำ แต่ฉันไม่รู้ว่าทำไมคุณถึงต้องการใช้
นี่คือปัญหาคุณรู้ว่าคุณต้องการทำอะไร แต่คุณมีหลายวิธีที่จะทำหรือคุณอาจเปลี่ยนวิธีที่คุณทำในภายหลัง มันจะดีถ้าคุณสามารถเล่นบทบาทของ clueless manager ได้ - เห่าคำสั่งบางอย่างและให้ผลลัพธ์ที่คุณต้องการโดยไม่สนใจว่ามันเสร็จสิ้นแล้ว
สมมติว่าคุณมีเว็บไซต์เล็ก ๆ และคุณบันทึกข้อมูลผู้ใช้ทั้งหมดของคุณในไฟล์ csv ไม่ใช่วิธีที่ซับซ้อนที่สุด แต่ทำงานได้ดีพอที่จะเก็บรายละเอียดผู้ใช้ของแม่ของคุณ ต่อมาไซต์ของคุณจะปิดและคุณมีผู้ใช้ 10,000 คน อาจถึงเวลาที่จะใช้ฐานข้อมูลที่เหมาะสม
ถ้าคุณฉลาดในตอนแรกคุณจะได้เห็นสิ่งนี้มาและไม่ได้โทรไปที่บันทึกเพื่อ csv โดยตรง คุณควรคิดถึงสิ่งที่คุณต้องการให้ทำไม่ว่ามันจะถูกนำไปใช้อย่างไร สมมติว่าและstore()
retrieve()
คุณสร้างPersister
อินเตอร์เฟสด้วยเมธอด abstract สำหรับstore()
และretrieve()
และสร้างCsvPersister
คลาสย่อยที่ใช้เมธอดเหล่านั้นจริง
หลังจากนั้นคุณสามารถสร้างสิ่งDbPersister
ที่ใช้พื้นที่จัดเก็บจริงและการดึงข้อมูลที่แตกต่างจากวิธีการเรียน csv ของคุณ
สิ่งที่ดีคือสิ่งที่คุณต้องทำตอนนี้คือการเปลี่ยนแปลง
Persister* prst = new CsvPersister();
ถึง
Persister* prst = new DbPersister();
แล้วคุณทำเสร็จแล้ว การโทรของคุณprst.store()
และprst.retrieve()
จะยังคงทำงานอยู่พวกเขากำลังจัดการ "เบื้องหลัง" ที่แตกต่างออกไป
ตอนนี้คุณยังต้องสร้างการใช้งาน cvs และ db ดังนั้นคุณยังไม่ได้รับความหรูหราในการเป็นหัวหน้า ประโยชน์ที่แท้จริงจะชัดเจนเมื่อคุณใช้อินเทอร์เฟซที่คนอื่นสร้างขึ้น ถ้าคนอื่นใจดีพอที่จะสร้างCsvPersister()
และDbPersister()
มีอยู่แล้วคุณเพียงแค่ต้องเลือกและเรียกวิธีการที่จำเป็น หากคุณตัดสินใจที่จะใช้อีกคนในภายหลังหรือในโครงการอื่นคุณรู้อยู่แล้วว่ามันทำงานอย่างไร
ฉันเป็นสนิมใน C ++ ของฉันจริงๆดังนั้นฉันจะใช้ตัวอย่างการเขียนโปรแกรมทั่วไปบางอย่าง ตู้คอนเทนเนอร์เป็นตัวอย่างที่ดีของวิธีที่อินเตอร์เฟสทำให้ชีวิตของคุณง่ายขึ้น
คุณสามารถมีArray
, LinkedList
, BinaryTree
ฯลฯ subclasses ทั้งหมดContainer
ซึ่งมีวิธีการเช่นinsert()
, ,find()
delete()
ตอนนี้เมื่อเพิ่มบางสิ่งลงในรายการที่เชื่อมโยงคุณไม่จำเป็นต้องรู้เลยว่ารายการที่เชื่อมโยงคืออะไร คุณเพียงแค่โทรmyLinkedList->insert(4)
และมันจะทำซ้ำอย่างน่าอัศจรรย์ผ่านรายการและติดไว้ในนั้น แม้ว่าคุณจะรู้ว่ารายการที่เชื่อมโยงทำงานอย่างไร (ซึ่งคุณควรจริง ๆ ) คุณไม่จำเป็นต้องค้นหาฟังก์ชั่นเฉพาะของมันเพราะคุณอาจรู้อยู่แล้วว่าพวกเขากำลังใช้อะไรที่แตกต่างจากContainer
ก่อนหน้านี้
ชั้นเรียนนามธรรม
คลาสนามธรรมค่อนข้างคล้ายกับอินเตอร์เฟส (ส่วนใหญ่แล้วอินเทอร์เฟซเป็นคลาสนามธรรม แต่ที่นี่ฉันหมายถึงคลาสพื้นฐานที่มีวิธีการบางอย่าง
สมมติว่าคุณกำลังสร้างเกมและคุณจำเป็นต้องตรวจจับเมื่อศัตรูอยู่ในระยะโจมตีของผู้เล่น คุณสามารถสร้างชั้นฐานที่มีวิธีการEnemy
inRange()
แม้ว่าจะมีหลายสิ่งหลายอย่างเกี่ยวกับศัตรูที่แตกต่างกัน แต่วิธีการที่ใช้ในการตรวจสอบระยะของพวกเขามีความสอดคล้องกัน ดังนั้นEnemy
ชั้นเรียนของคุณจะมีวิธีการออกเนื้อเพื่อตรวจสอบช่วง แต่วิธีเสมือนบริสุทธิ์สำหรับสิ่งอื่น ๆ ที่ไม่มีความคล้ายคลึงกันในหมู่ศัตรู
สิ่งที่ดีเกี่ยวกับเรื่องนี้คือถ้าคุณทำโค้ดตรวจจับระยะไกลหรือต้องการปรับแต่งมันคุณต้องเปลี่ยนมันในที่เดียว
แน่นอนมีเหตุผลอื่นอีกมากมายสำหรับอินเทอร์เฟซและคลาสพื้นฐานที่เป็นนามธรรม แต่นั่นเป็นเหตุผลบางประการที่คุณอาจใช้มัน
singletons
ฉันใช้มันเป็นครั้งคราวและฉันไม่เคยถูกเผาจากพวกเขา ไม่ได้หมายความว่าพวกเขาจะไม่ทำลายชีวิตของฉันในบางช่วงเวลาจากประสบการณ์ของคนอื่น
นี่คือการอภิปรายที่ดีเกี่ยวกับสถานะโลกจากคนที่มีประสบการณ์และระมัดระวังมากกว่า:
ทำไมรัฐโลกถึงชั่วร้าย?