กลับไปหน้าบทความ

อ่าน 2 นาที

รูปแบบอินเทอร์เฟซเครื่องหมาย

รูปแบบอินเทอร์เฟซมาร์กเกอร์ (Marker Interface Pattern) เป็นรูป แบบการออกแบบ ใน วิทยาการคอมพิวเตอร์ ซึ่งใช้กับภาษาโปรแกรมที่ให้ข้อมูลประเภทแบบเรียลไทม์เกี่ยวกับวัตถุ...

รูปแบบอินเทอร์เฟซเครื่องหมาย

รูปแบบอินเทอร์เฟซมาร์กเกอร์ (Marker Interface Pattern)เป็นรูปแบบการออกแบบในวิทยาการคอมพิวเตอร์ซึ่งใช้กับภาษาโปรแกรมที่ให้ข้อมูลประเภทแบบเรียลไทม์เกี่ยวกับวัตถุ รูปแบบนี้ช่วยให้สามารถเชื่อมโยงเมตาเดตาเข้ากับคลาสได้ ในกรณีที่ภาษาโปรแกรมนั้นไม่มีการรองรับเมตาเดตาอย่างชัดเจน

ในการใช้รูปแบบนี้คลาสจะใช้อินเทอร์เฟซตัวบ่งชี้[ 1 ] (เรียกอีกอย่างว่าอินเทอร์เฟซการติดแท็ก ) ซึ่งเป็นอินเทอร์เฟซว่างเปล่า[ 2 ]และเมธอดที่โต้ตอบกับอินสแตนซ์ของคลาสนั้นจะทดสอบการมีอยู่ของอินเทอร์เฟซ ในขณะที่อินเทอร์ เฟซทั่วไป จะระบุฟังก์ชันการทำงาน (ในรูปแบบของการประกาศเมธอด) ที่คลาสที่ใช้งานต้องรองรับ อินเทอร์เฟซตัวบ่งชี้ไม่จำเป็นต้องทำเช่นนั้น การมีอยู่ของอินเทอร์เฟซดังกล่าวเพียงอย่างเดียวก็บ่งบอกถึงพฤติกรรมเฉพาะของคลาสที่ใช้งานแล้ว อินเทอร์เฟซแบบไฮบริดซึ่งทำหน้าที่ทั้งเป็นตัวบ่งชี้และระบุเมธอดที่จำเป็นนั้นเป็นไปได้ แต่หากใช้ไม่ถูกต้องอาจทำให้เกิดความสับสนได้

ตัวอย่าง

ตัวอย่างหนึ่งของการประยุกต์ใช้อินเทอร์เฟซตัวบ่งชี้จากภาษาการเขียนโปรแกรม JavaคือSerializableอินเทอร์เฟซต่อไปนี้:

แพ็คเกจjava.io ;อินเทอร์เฟซสาธารณะSerializable { }

คลาสนี้ใช้งานอินเทอร์เฟซนี้เพื่อระบุว่าสมาชิกข้อมูลที่ไม่ใช่แบบชั่วคราวสามารถเขียนลงในออบ เจ็กต์ได้ ObjectOutputStreamเมธอดObjectOutputStreamส่วนตัวwriteObject0(Object,boolean)ประกอบด้วยชุดinstanceofการทดสอบเพื่อตรวจสอบความสามารถในการเขียน ซึ่งหนึ่งในนั้นจะตรวจSerializableสอบอินเทอร์เฟซ หากการทดสอบใด ๆ ล้มเหลว เมธอดจะโยนข้อNotSerializableExceptionยกเว้น

วิจารณ์

ปัญหาอย่างหนึ่งของอินเทอร์เฟซแบบมาร์กเกอร์คือ เนื่องจากอินเทอร์เฟซกำหนดข้อตกลงสำหรับการใช้งานคลาส และข้อตกลงนั้นจะถูกส่งต่อให้คลาสย่อยทั้งหมด มาร์กเกอร์จึงไม่สามารถ "ยกเลิกการใช้งาน" ได้ ในตัวอย่างที่ให้มา คลาสย่อยใดๆ ที่ไม่ได้ตั้งใจสำหรับการซีเรียลไลซ์ (อาจเป็นเพราะขึ้นอยู่กับสถานะชั่วคราว) จะต้องโยนข้อยกเว้น NotSerializableException อย่างชัดเจน (ตามObjectOutputStreamเอกสาร)

อีกวิธีหนึ่งคือให้ภาษานั้นรองรับเมตาเดตาโดยตรง:

  • ทั้ง . NET FrameworkและJava (ตั้งแต่ Java 5 (1.5)) ต่างก็รองรับเมตาเดตาประเภทนี้ ใน .NET เรียกว่า"แอตทริบิวต์แบบกำหนดเอง" (custom attributes)ส่วนใน Java เรียกว่า" แอนโนเทชัน " (annotations ) แม้จะมีชื่อต่างกัน แต่ในเชิงแนวคิดแล้วเป็นสิ่งเดียวกัน สามารถกำหนดแอนโนเทชันได้ในคลาส ตัวแปรสมาชิก เมธอด และพารามิเตอร์ของเมธอด และสามารถเข้าถึงได้โดยใช้การสะท้อน (reflection ) C++26เพิ่มการรองรับแอนโนเทชันที่คล้ายกันให้กับC ++
  • ในภาษา Pythonคำว่า "marker interface" เป็นคำที่ใช้กันทั่วไปในZopeและPloneอินเทอร์เฟซจะถูกประกาศเป็นเมตาเดตา และคลาสย่อยสามารถใช้implementsOnlyเพื่อประกาศว่าตนเองไม่ได้นำเอาคุณสมบัติทั้งหมดจากคลาสแม่มาใช้

ดูเพิ่มเติม

อ่านเพิ่มเติม

Java ที่มีประสิทธิภาพ[ 1 ]โดยJoshua Bloch

  1. ^ Bloch, Joshua (2018). Effective Java (ฉบับที่สาม). บอสตัน. ISBN 978-0-13-468599-1. OCLC  1018432176 .{{cite book}}: CS1 maint: ไม่พบตำแหน่งผู้เผยแพร่ ( ลิงก์ )
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Marker_interface_pattern&oldid=1309374795 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ รูปแบบอินเทอร์เฟซเครื่องหมาย

รูปแบบอินเทอร์เฟซมาร์กเกอร์ (Marker Interface Pattern) เป็นรูป แบบการออกแบบ ใน วิทยาการคอมพิวเตอร์ ซึ่งใช้กับภาษาโปรแกรมที่ให้ข้อมูลประเภทแบบเรียลไทม์เกี่ยวกับวัตถุ...

ตัวอย่าง

ตัวอย่างหนึ่งของการประยุกต์ใช้อินเทอร์เฟซตัวบ่งชี้จาก ภาษาการเขียนโปรแกรม Java คือ Serializable อินเทอร์เฟซต่อไปนี้:

วิจารณ์

ปัญหาอย่างหนึ่งของอินเทอร์เฟซแบบมาร์กเกอร์คือ เนื่องจากอินเทอร์เฟซกำหนดข้อตกลงสำหรับการใช้งานคลาส และข้อตกลงนั้นจะถูกส่งต่อให้คลาสย่อยทั้งหมด มาร์กเกอร์จึงไม่สามารถ "ยกเลิกการใช้งาน" ได้ ในตัวอย่างที่ให้มา คลาสย่อยใดๆ ที่ไม่ได้ตั้งใจสำหรับการซีเรียลไลซ์...

อ่านเพิ่มเติม

Java ที่มีประสิทธิภาพ [ 1 ] โดย Joshua Bloch