คำจำกัดความของผู้เข้าชม: การดำเนินการที่ทำหน้าที่กับแต่ละวัตถุในกลุ่มวัตถุบางกลุ่ม ช่วยให้คุณสามารถกำหนดการดำเนินการใหม่ที่ดำเนินการกับวัตถุเหล่านี้โดยไม่ต้องเปลี่ยนพวกเขาเอง
ใน Java รูปแบบของผู้เข้าชมจะแยกองค์ประกอบในโครงสร้างการรวบรวมและพฤติกรรมของการดำเนินงานในองค์ประกอบเหล่านี้
ทำไมต้องใช้โหมดผู้เยี่ยมชม
Java Collection (รวมถึง Vector และ Hashtable) เป็นเทคโนโลยีที่เราใช้บ่อยที่สุด แต่คอลเลกชันดูเหมือนจะเป็นภาษีมูลค่าเพิ่มสีดำขนาดใหญ่ จากนั้นเราจะต้องใช้ถ้าจะตัดสินเช่น:
การคัดลอกรหัสมีดังนี้:
ตัววนซ้ำ iterator = collection.iterator ()
ในขณะที่ (iterator.hasnext ()) {
Object O = iterator.next ();
ถ้า (o อินสแตนซ์ของคอลเลกชัน)
MessyPrintCollection ((คอลเลกชัน) O);
อื่นถ้า (o อินสแตนซ์ของสตริง)
System.out.println ("'"+O.ToString ()+"'");
อื่นถ้า (o อินสแตนซ์ของลอย)
System.out.println (O.ToString ()+"F");
อื่น
System.out.println (O.ToString ());
-
ในตัวอย่างข้างต้นเราใช้อินสแตนซ์ของเพื่อกำหนดประเภทของ O
เห็นได้ชัดว่าข้อเสียของการทำเช่นนี้หากรหัสนั้นยุ่งยากเราสามารถแก้ปัญหาได้โดยใช้โหมดผู้เยี่ยมชม
วิธีใช้โหมดผู้เยี่ยมชม
สำหรับตัวอย่างข้างต้นเราออกแบบผู้เยี่ยมชมผู้เยี่ยมชมอินเตอร์เฟส:
การคัดลอกรหัสมีดังนี้:
ผู้เยี่ยมชมส่วนต่อประสานสาธารณะ
-
การเยี่ยมชมสาธารณะสาธารณะ (คอลเลกชันคอลเลกชัน);
visitstring สาธารณะ (สตริงสตริง);
Void Public Visitfloat (ลอยลอย);
-
ในอินเทอร์เฟซนี้ใส่ประเภทของคลาสที่เราคิดว่าคอลเลกชันเป็นไปได้
ด้วยผู้เข้าชมเราจำเป็นต้องเข้าชม ไม่ต้อนรับเขาผู้เข้าชมจะไม่สามารถเยี่ยมชมได้)
เรากำหนดอินเทอร์เฟซนี้ว่าเป็นไปได้ซึ่งคือการกำหนดการดำเนินการที่ยอมรับนั่นคือทำให้แต่ละองค์ประกอบของการรวบรวมสามารถเข้าถึงได้
การคัดลอกรหัสมีดังนี้:
อินเทอร์เฟซสาธารณะที่มองเห็นได้ {
โมฆะสาธารณะยอมรับ (ผู้เยี่ยมชมผู้เยี่ยมชม);
-
ตกลงด้วยสองอินเทอร์เฟซเราต้องกำหนดการนำไปใช้งานเฉพาะ (คลาสคอนกรีต):
การคัดลอกรหัสมีดังนี้:
คอนกรีตคลาสสาธารณะใช้การมองเห็น
-
ค่าสตริงส่วนตัว
คอนกรีตสาธารณะ (สตริงสตริง) {
value = String;
-
// กำหนดเนื้อหาเฉพาะของการยอมรับที่นี่เป็นประโยคที่ง่ายมากในการโทรหาโมฆะสาธารณะยอมรับ (ผู้เยี่ยมชมผู้เยี่ยมชม) {
ผู้เยี่ยมชม VisitString (นี่);
-
-
มาดูการใช้งานที่เป็นรูปธรรมของผู้เข้าชม:
การคัดลอกรหัสมีดังนี้:
Concretevisitor ระดับสาธารณะใช้ผู้เข้าชม
-
// ในวิธีนี้เราใช้การเข้าถึงองค์ประกอบที่ประสบความสำเร็จของการรวมช่องว่างสาธารณะ VISTCOLLECTION (คอลเลกชันคอลเลกชัน) {
ตัววนซ้ำ iterator = collection.iterator ()
ในขณะที่ (iterator.hasnext ()) {
Object O = iterator.next ();
ถ้า (o อินสแตนซ์ของการเยี่ยมชม)
((มองเห็นได้) o) .Ccept (นี้);
-
VisitString สาธารณะ (สตริงสตริง) {
System.out.println ("" "+String+" '");
-
Void Public Visitfloat (ลอยลอย) {
System.out.println (float.toString ()+"f");
-
-
ในการเยี่ยมชมข้างต้นเราใช้การเข้าถึงองค์ประกอบแต่ละองค์ประกอบของคอลเลกชันโดยใช้คำพิพากษาเพียงครั้งเดียวเพียงเพื่อพิจารณาว่าสามารถเข้าถึงได้หรือไม่
ณ จุดนี้เราได้เสร็จสิ้นสถาปัตยกรรมพื้นฐานของรุ่นผู้เยี่ยมชม
ข้อกำหนดเบื้องต้นสำหรับการใช้โหมดผู้เยี่ยมชม
ประเภทวัตถุในโครงสร้างกลุ่มวัตถุไม่ค่อยมีการเปลี่ยนแปลงนั่นคือประเภทตัวตนของผู้เข้าชมไม่ค่อยมีการเปลี่ยนแปลงเช่นประเภทในผู้เข้าชมด้านบนไม่ค่อยมีการเปลี่ยนแปลงหากจำเป็นต้องมีการดำเนินการใหม่เช่นในตัวอย่างข้างต้นเรา นอกเหนือจากการใช้งานที่เฉพาะเจาะจงของคอนกรีตไลน์ยังจำเป็นต้องมีคอนกรีตคอนกรีตคอนกรีต 2
จะเห็นได้ว่ามีข้อกำหนดเบื้องต้นสำหรับการใช้โหมดผู้เข้าชม
หากผู้เข้าชมเปลี่ยนแปลงบ่อยครั้งนั่นคือประเภทวัตถุในกลุ่มวัตถุมักจะเปลี่ยนไปข้อเสนอแนะทั่วไปคือมันเป็นการดีกว่าที่จะกำหนดการดำเนินการทีละคนในชั้นเรียนวัตถุเหล่านี้ แต่ Java สะท้อนให้เห็นถึงเทคโนโลยีนี้แก้ปัญหานี้