JavaRush /จาวาบล็อก /Random-TH /อินเทอร์เฟซคืออะไร
fog
ระดับ

อินเทอร์เฟซคืออะไร

เผยแพร่ในกลุ่ม
อินเทอร์เฟซเป็นสัญญา (ข้อตกลง) สาธารณะที่ยอมรับโดยทั่วไปซึ่งอธิบายพฤติกรรมบางอย่าง พวกเขาต้องการอะไร? ตัวอย่างเช่น สมมติว่าเรามีลิงก์ที่ชี้ไปยังรายการสตริง สมมติว่ามีการเพิ่มองค์ประกอบหลายอย่างลงในรายการนี้ตั้งแต่ต้น จากนั้นรายการทั้งหมดจะได้รับการประมวลผลเพียงครั้งเดียว สมมติว่าเราตัดสินใจทำตามคำแนะนำที่รู้จักกันดีและใช้คลาสArrayList:
ArrayList<String> list = new ArrayList<>();
เราเขียนพฤติกรรมของโปรแกรมด้วยโค้ด 100,500 บรรทัดที่ใช้รายการสตริงนี้ และใช้วิธีการเฉพาะคลาสเพื่อเพิ่มประสิทธิภาพการArrayListทำงาน ตัวอย่างเช่นmakesureCapacity( ) ตราบใดที่มีการเพิ่มบรรทัดต่อท้ายรายการ ทุกอย่างก็ทำงานได้ดีและรวดเร็ว แต่ตอนนี้เราจำเป็นต้องปรับทิศทางโปรแกรมของเราใหม่ให้เป็นงานประเภทอื่นเล็กน้อย โดยที่บรรทัดจะถูกเพิ่มไว้ที่จุดเริ่มต้นของรายการเป็นหลัก สำหรับการโหลดประเภทนี้จะเหมาะสมกว่าLinkedListมาก แต่หากเราต้องการแปลโปรแกรมของเราที่มีโค้ดจำนวน 100,500 บรรทัดไปไว้บน Rails LinkedListเราจะต้องค้นหาและลบการใช้ArrayListวิธีการเฉพาะออกไป บางทีในบางสถานที่อาจเปลี่ยนแปลงตรรกะของแต่ละส่วนของโปรแกรมไปอย่างมาก หากเราใช้เฉพาะวิธีการที่มีอยู่ในทั้งArrayListและในLinkedListเราก็ไม่จำเป็นต้องทำเช่นนี้ เราสามารถเปลี่ยนโค้ดได้หนึ่งบรรทัด - การประกาศรายการ:
LinkedList<String> list = new LinkedList<>();
เราจะสังเกตได้ว่ามันจะสะดวกกว่าถ้าจะประกาศวิธีการทั่วไปสำหรับคลาสเหล่านี้ในคลาสบรรพบุรุษ อาจเป็นนามธรรมAbstractListเป็นต้น ในกรณีนี้ เราสามารถประกาศรายการของเราได้ดังนี้:
AbstractList<String> list = new ArrayList<>();
และเราสามารถเปลี่ยนการใช้งานได้อย่างรวดเร็วดังนี้:
AbstractList<String> list = new LinkedList<>();
แต่ในกรณีนี้ คลาสที่เราสามารถใช้ในโปรแกรมของเรานั้นถูกจำกัดไว้เฉพาะลูกหลานของคลาสAbstractListแม้ว่าจะมีคลาสที่เหมาะสมกว่าซึ่งไม่ใช่ลูกหลานของคลาสAbstractListแต่มีวิธีการเดียวกันและมีพฤติกรรมเหมือนกัน ฉันควรทำอย่างไรดี? นี่คือสาเหตุว่าทำไม อินเทอร์เฟซจึงถูกคิดค้นขึ้น อินเทอร์เฟซเป็นแบบแผนเกี่ยวกับชุดของวิธีการและพฤติกรรมของวิธีการเหล่านั้นที่คลาสที่ไม่เกี่ยวข้องโดยสิ้นเชิงสามารถกระทำได้ โดยอนุญาตให้วิธีใดวิธีหนึ่งสามารถอ้างอิงได้ด้วยการอ้างอิงเดียว ตัวอย่างเช่น:
List<String> list;
list = new ArrayList<>();
list = new LinkedList<>();
list = new AnotherListClass<>();
แม้ว่าAnotherListClassคลาสจะไม่มีคลาสบรรพบุรุษ ร่วม ArrayListกัน ยกเว้น. ตัวอย่างที่ดีของอินเทอร์เฟซคือการบังคับเลี้ยวของรถยนต์ - รถมีพวงมาลัย คันเหยียบ และกระปุกเกียร์ ในรถยนต์ส่วนใหญ่ องค์ประกอบเหล่านี้เป็นไปตามรูปแบบพฤติกรรมเดียวกัน ตัวอย่างเช่น หากคุณหมุนพวงมาลัยทวนเข็มนาฬิกา รถจะเลี้ยวซ้ายแทนที่จะเร่งความเร็วโดยไม่คำนึงถึงยี่ห้อ หากคุณรู้วิธีใช้การควบคุมเหล่านี้ คุณสามารถควบคุมรถทุกคันได้อย่างง่ายดาย โดยไม่คำนึงถึงรุ่น ปี ยี่ห้อ หรือประเภทเครื่องยนต์ ยิ่งไปกว่านั้น เราสามารถจินตนาการถึงสถานการณ์ที่การขนส่งประเภทต่าง ๆ โดยสิ้นเชิง (เช่น ยานอวกาศ) มีอินเทอร์เฟซการควบคุมเหมือนกับรถยนต์ หากคุณรู้วิธีขับรถและพบว่าตัวเองอยู่ในที่นั่งนักบินของเรือลำนี้ คุณจะสามารถหลีกเลี่ยงการหลงทางในสถานการณ์นี้ได้ ทำซ้ำอีกครั้ง:LinkedListObject
  • อินเทอร์เฟซคือสัญญา (ข้อตกลง) เกี่ยวกับพฤติกรรม
  • คลาสจำนวนมาก แม้แต่คลาสที่ไม่เกี่ยวข้องกับการสืบทอดก็สามารถประกาศว่าคลาสเหล่านั้นตกลงที่จะปฏิบัติตามสัญญานี้ (การใช้งานอินเทอร์เฟซ)
  • การวางคำอธิบายพฤติกรรมในอินเทอร์เฟซแยกต่างหากนั้นสะดวกมาก เนื่องจากจะเพิ่มความยืดหยุ่นของโค้ด ทำให้คุณสามารถสลับการใช้งาน (คลาสที่ใช้อินเทอร์เฟซ) ของอินเทอร์เฟซเป็นคลาสที่ไม่เกี่ยวข้องกับการสืบทอด
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION