"สวัสดี Amigo! วันนี้ฉันจะบอกคุณว่า « อะแดปเตอร์ » คือ อะไรฉันหวังว่าหลังจากเรียนรู้เกี่ยวกับหัวข้อนี้แล้ว คุณจะมีความเข้าใจที่ดีขึ้นเกี่ยวกับสตรีมอินพุต/เอาต์พุต"

จินตนาการว่าโปรแกรมของคุณใช้สองเฟรมเวิร์กที่เขียนโดยโปรแกรมเมอร์/บริษัทอื่น เฟรมเวิร์กทั้งสองนั้นดีมากและใช้หลักการ OOP: สิ่งที่เป็นนามธรรม, ความหลากหลาย, การห่อหุ้ม เมื่อรวมกันแล้ว จะครอบคลุมสิ่งที่โปรแกรมของคุณต้องทำเกือบทั้งหมด คุณเหลืองานง่ายๆ คุณต้องส่งวัตถุที่สร้างโดยเฟรมเวิร์กหนึ่งไปยังเฟรมเวิร์กอื่น แต่เฟรมเวิร์กทั้งสองต่างกันอย่างสิ้นเชิงและ "ไม่รู้จักกัน" นั่นคือไม่มีคลาสใดเหมือนกัน คุณต้องแปลงวัตถุของเฟรมเวิร์กหนึ่งให้เป็นวัตถุของอีกเฟรมหนึ่ง
งานนี้สามารถแก้ไขได้อย่างสวยงามโดยใช้เทคนิค « อะแดปเตอร์ » (รูปแบบการออกแบบ):
รหัสจาวา | คำอธิบาย |
---|---|
|
สิ่งนี้สะท้อนถึงรูปแบบการออกแบบอแด็ปเตอร์
แนวคิดพื้นฐานคือคลาส MyClass จะแปลง (ปรับ) อินเทอร์เฟซหนึ่งไปยังอีกอินเทอร์เฟซหนึ่ง |
"คุณช่วยยกตัวอย่างที่เจาะจงกว่านี้หน่อยได้ไหม"
"ตกลง สมมติว่าแต่ละเฟรมเวิร์กมีอินเทอร์เฟซ "รายการ" เฉพาะของตัวเอง พวกมันอาจมีลักษณะดังนี้:"
รหัสจาวา | คำอธิบาย |
---|---|
|
รหัสจากกรอบแรก ( อัลฟ่า )
AlphaListเป็นหนึ่งในอินเทอร์เฟซที่อนุญาตให้รหัสเฟรมเวิร์กโต้ตอบกับโค้ดที่ใช้เฟรมเวิร์ก |
|
AlphaList Manager AlphaListManager เป็นคลาสในเฟรมเวิร์ก เมธอด createList จะสร้างวัตถุ AlphaList |
|
รหัสจากเฟรมเวิร์กที่สอง ( เบต้า )
BetaListเป็นหนึ่งในอินเทอร์เฟซที่อนุญาตให้รหัสเฟรมเวิร์กโต้ตอบกับโค้ดที่ใช้เฟรมเวิร์ก BetaSaveManagerเป็นคลาสในเฟรมเวิร์ก วิธี การ saveListจะบันทึกวัตถุ BetaList |
|
คลาส «Adapter» ที่แปลงจาก อินเตอร์เฟส AlphaListเป็นอินเตอร์เฟสBetaList
คลาส ListAdapter ใช้ อินเทอร์เฟ ซ BetaList จากเฟรมเวิร์กที่สอง เมื่อมีคนเรียกใช้เมธอดเหล่านี้ รหัสคลาส «ส่งต่อ» การเรียกไปยัง ตัวแปร รายการซึ่งเป็นAlphaListจากเฟรมเวิร์กแรก วัตถุAlphaListถูกส่งผ่านไปยังตัวสร้างListAdapter เมธอดsetSizeทำงานตามกฎต่อไปนี้: หากต้องเพิ่มขนาดของรายการ ให้เพิ่มรายการว่าง (null) หากต้องการลดขนาดของรายการ ให้ลบรายการในตอนท้าย |
|
ตัวอย่างของวิธีการใช้ |
"ฉันชอบตัวอย่างสุดท้ายของคุณมากที่สุด กระชับและเข้าใจได้ดีมาก"
GO TO FULL VERSION