โหมดอะแดปเตอร์ใช้ที่นี่ เนื่องจากประเภทคอนโทรลเลอร์นั้นแตกต่างกันและมีวิธีการใช้งานหลายวิธีวิธีการโทรจึงไม่ได้กำหนด หากคุณต้องการเรียกใช้วิธีคอนโทรลเลอร์โดยตรงคุณต้องเขียนในรหัสดังนี้:
if (mappedhandler.gethandler () อินสแตนซ์ของ MultiactionController) {((MultiactionController) mappedHandler.gethandler ()). xxx} อื่นถ้า (mappedhandler.gethandler () อินสแตนซ์ xxx) {... } อื่น ๆ ถ้า (... ) สมมติว่าถ้าเราเพิ่ม hardcontroller เราต้องเพิ่มบรรทัดถ้า (mappedhandler.gethandler () อินสแตนซ์ของฮาร์ดคอนโทรลเลอร์)
แบบฟอร์มนี้ทำให้โปรแกรมยากที่จะรักษาและละเมิดหลักการเปิดและปิดในรูปแบบการออกแบบ - การเปิดสำหรับส่วนขยายและการปิดสำหรับการแก้ไข
ดังนั้นสปริงจึงกำหนดอินเทอร์เฟซอะแดปเตอร์เพื่อให้ตัวควบคุมแต่ละตัวมีคลาสการใช้งานอะแดปเตอร์ที่สอดคล้องกัน
ให้อะแดปเตอร์ดำเนินการวิธีการที่สอดคล้องกันแทนคอนโทรลเลอร์ ด้วยวิธีนี้เมื่อขยายคอนโทรลเลอร์คุณจะต้องเพิ่มคลาสอะแดปเตอร์เพื่อเติมเต็ม SpringMVC ให้เสร็จสมบูรณ์ มันเป็นวิธีที่ฉลาดมากจริงๆ!
หากคุณไม่พูดเรื่องไร้สาระมากแค่ใส่รหัสไว้ เพื่อให้เห็นอย่างชัดเจนคุณสามารถใช้ชุดรหัสเพื่อจำลอง SpringMVC ด้วยตัวเอง มันง่ายที่จะลดการโฟกัสของคุณโดยการวางซอร์สโค้ดสปริงโดยตรง
// กำหนดส่วนต่อประสานอะแดปเตอร์อินเทอร์เฟซ Public HandlerAdapter {Public Boolean รองรับ (Handler Object); การจัดการโมฆะสาธารณะ (ตัวจัดการวัตถุ);} // ต่อไปนี้เป็นตัวควบคุมการใช้งานคอนโทรลเลอร์สาธารณะสามประเภท คลาส SimpleController ใช้คอนโทรลเลอร์ {โมฆะสาธารณะ dosimplerHandler () {system.out.println ("ง่าย ... ");}} public class AnnotationController ใช้คอนโทรลเลอร์ {void doannotationhandler () {system.out.out.println ( HandlerAdapter {มือจับสาธารณะ (ตัวจัดการวัตถุ) {((SimpleController) Handler) .dosimplerHandler ();} การสนับสนุนบูลีนสาธารณะ (ตัวจัดการวัตถุ) {return {((httpcontroller) handler) .dohttphandler ();} การสนับสนุนบูลีนสาธารณะ (ตัวจัดการวัตถุ) {return (handler อินสแตนซ์ของ httpcontroller);}} คลาสสาธารณะ Annotationhandleradapter การสนับสนุนบูลีน (ตัวจัดการวัตถุ) {return (อินสแตนซ์ของตัวจัดการของ AnnotationController);}} // จำลอง dispatcherservlet นำเข้า java.util.arraylist; นำเข้า java.util.list; DispatchServlet () {handlerAdapters.add (ใหม่ NENTATIONHANDLERADAPTER ()); handlerAdapters.add (ใหม่ httphandlerAdapter ()); handleradapters.add (ใหม่ simplehandleradapter () ออกไป ไม่ว่าจะใช้คอนโทรลเลอร์ชนิดใดอะแดปเตอร์สามารถรับผลลัพธ์ที่ต้องการได้เสมอหลังจากการปรับตัว // httpController Controller = ใหม่ httpController (); // AnnotationController Controller = New AnnotationController (); SimpleController Controller = ใหม่ SimpleController (); // รับอะแดปเตอร์ HandlerAdapter อะแดปเตอร์ที่สอดคล้องกัน = Gethandler (คอนโทรลเลอร์); // ดำเนินการคอนโทรลเลอร์ที่สอดคล้องกันวิธีการที่สอดคล้องกันอะแดปเตอร์ this.handleradapters) {if (adapter.supports (คอนโทรลเลอร์)) {return adapter;}} return null;} โมฆะคงที่สาธารณะ (สตริง [] args) {ใหม่ dispatchServlet (). dodispatch ();}}}}ผ่านโมเดลนี้เราสามารถเห็นความประณีตของรหัสโอเพ่นซอร์ส เมื่อเราดูซอร์สโค้ดเฟรมเวิร์กเราต้องมีเป้าหมายในการอ่านเพื่อที่เราจะได้พบกับสิ่งต่าง ๆ มากมายที่เราต้องเรียนรู้ ปัจจุบันโพสต์จำนวนมากวิเคราะห์ซอร์สโค้ดส่วนใหญ่อธิบายว่าอย่างไร
นี่คือวิธีดึงดูดความสนใจ ฉันหวังว่าคุณจะสามารถพูดคุย "ทำไม" ด้วยกัน
สรุป
ข้างต้นคือทั้งหมดเกี่ยวกับตัวอย่างรหัสโหมดอะแดปเตอร์ SpringMVC ในบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!