23 รูปแบบการออกแบบบทที่ 14: รูปแบบตัววนซ้ำ Java
คำจำกัดความ: จัดเตรียมวิธีการเข้าถึงองค์ประกอบต่าง ๆ ในวัตถุคอนเทนเนอร์โดยไม่เปิดเผยรายละเอียดภายในของวัตถุ
ประเภท: รูปแบบพฤติกรรม
แผนภาพชั้นเรียน:
หากคุณต้องการถามโหมดที่ใช้กันมากที่สุดใน Java คำตอบไม่ใช่โหมด Singleton หรือโหมดโรงงานหรือโหมดกลยุทธ์ แต่เป็นโหมด Iterator มาดูรหัสหนึ่งก่อน:
Public Static Void Print (คอลเลกชัน coll) {iterator it = coll.iterator (); ในขณะที่ (it.hasnext ()) {string str = (string) it.next (); System.out.println (str); -ฟังก์ชั่นของวิธีนี้คือการพิมพ์ลูปคอลเลกชันสตริงและรูปแบบตัววนซ้ำจะใช้ในรูปแบบตัววนซ้ำ ภาษา Java ได้ใช้รูปแบบตัววนซ้ำอย่างสมบูรณ์ ตัววนซ้ำแปลเป็นภาษาจีนหมายถึงตัววนซ้ำ เมื่อพูดถึงตัววนซ้ำก่อนอื่นมันเกี่ยวข้องกับชุด ชุดจะเรียกว่ามวลรวมคอนเทนเนอร์ ฯลฯ เราสามารถพิจารณาชุดเป็นคอนเทนเนอร์ที่สามารถมีวัตถุได้ ตัวอย่างเช่นรายการตั้งค่าแผนที่และแม้กระทั่งอาร์เรย์สามารถเรียกได้ว่าชุด ฟังก์ชั่นของตัววนซ้ำคือการสำรวจวัตถุในคอนเทนเนอร์ทีละตัว
โครงสร้างของรูปแบบตัววนซ้ำ
บทคัดย่อคอนเทนเนอร์: โดยทั่วไปมีวิธีการ iterator () เช่นอินเทอร์เฟซคอลเลกชันอินเตอร์เฟสรายการชุดอินเตอร์เฟส ฯลฯ ใน Java
คอนเทนเนอร์เฉพาะ: มันเป็นคลาสการใช้งานที่เป็นรูปธรรมของคอนเทนเนอร์นามธรรมเช่นรายการที่สั่งซื้อของรายการอินเทอร์เฟซเพื่อใช้งาน ArrayList รายการที่เชื่อมโยงของอินเทอร์เฟซรายการเพื่อใช้งาน LinkList รายการแฮชของอินเทอร์เฟซที่ตั้งไว้เพื่อใช้งาน HashSet ฯลฯ
บทคัดย่อตัววนซ้ำ: กำหนดวิธีที่จำเป็นในการสำรวจองค์ประกอบ โดยทั่วไปการพูดมีสามวิธี: รับวิธีแรก () ขององค์ประกอบแรกรับวิธีถัดไป () ขององค์ประกอบถัดไปตรวจสอบว่าวิธีการ traversal end isdone () (หรือ hasnext ()), ลบ () ของวัตถุปัจจุบันหรือไม่
การใช้งาน Iterator: ใช้วิธีการที่กำหนดไว้ในอินเทอร์เฟซตัววนซ้ำเพื่อทำซ้ำของคอลเลกชันให้เสร็จสมบูรณ์
การใช้รหัส
อินเตอร์เฟสตัววนซ้ำ {วัตถุสาธารณะถัดไป (); บูลีนสาธารณะ Hasnext (); } คลาส Concreteiterator ดำเนินการ iterator {รายการส่วนตัวรายการ = new ArrayList (); เคอร์เซอร์ int ส่วนตัว = 0; Public Concreteiterator (รายการรายการ) {this.list = list; } บูลีนสาธารณะ hasnext () {if (cursor == list.size ()) {return false; } return true; } วัตถุสาธารณะถัดไป () {Object obj = null; if (this.hasnext ()) {obj = this.list.get (เคอร์เซอร์ ++); } return obj; }} การรวมอินเตอร์เฟส {โมฆะสาธารณะเพิ่ม (Object OBJ); โมฆะสาธารณะลบ (Object OBJ); Public Iterator Iterator (); } คลาส ConcreteAggregate ใช้งานรวม {รายการส่วนตัว = new ArrayList (); โมฆะสาธารณะเพิ่ม (Object obj) {list.add (obj); } public iterator iterator () {ส่งคืนคอนกรีตใหม่ (รายการ); } โมฆะสาธารณะลบ (object obj) {list.remove (obj); }} ไคลเอนต์คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (String [] args) {Aggregate Ag = ใหม่ concreteAggregate (); Ag.add ("Xiaoming"); Ag.add ("Xiaohong"); Ag.add ("Xiaogang"); ตัววนซ้ำมัน = ag.iterator (); ในขณะที่ (it.hasnext ()) {string str = (string) it.next (); System.out.println (str); - ในรหัสข้างต้นการรวมเป็นอินเทอร์เฟซคลาสคอนเทนเนอร์ คุณสามารถจินตนาการคอลเลกชันรายการชุด ฯลฯ การรวมเป็นเวอร์ชันที่เรียบง่ายของพวกเขา มีสามวิธีหลักในอินเทอร์เฟซคลาสคอนเทนเนอร์: เพิ่มวิธีการเพิ่มวัตถุ, ลบวิธีการลบวัตถุลบและรับ iterator method iterator Iterator เป็นอินเทอร์เฟซตัววนซ้ำซึ่งมีสองวิธีหลัก: รับวิธีการวนซ้ำของวัตถุต่อไปและตรวจสอบว่าจะทำซ้ำวิธีการ Hasnext หรือไม่ คุณสามารถเปรียบเทียบอินเทอร์เฟซทั้งสองของ java.util.list และ java.util.iterator เพื่อคิดด้วยตัวเอง
ข้อดีของโหมดตัววนซ้ำ:
วิธีการสำรวจนั้นง่ายขึ้นและยังคงลำบากในการสำรวจการรวบรวมวัตถุ สำหรับอาร์เรย์หรือรายการที่สั่งซื้อเรายังสามารถรับพวกเขาผ่านเคอร์เซอร์ แต่ผู้ใช้จำเป็นต้องสำรวจวัตถุด้วยตัวเองในหลักฐานว่าพวกเขามีความเข้าใจที่ชัดเจนเกี่ยวกับคอลเลกชัน อย่างไรก็ตามสำหรับตารางแฮชมันเป็นเรื่องยากที่จะสำรวจผู้ใช้ หลังจากแนะนำวิธีการวนซ้ำมันจะง่ายกว่าสำหรับผู้ใช้ที่จะใช้
มีหลายวิธีในการสำรวจเช่นสำหรับรายการที่สั่งซื้อเราสามารถจัดหาผู้วนซ้ำสองคนด้วยคำสั่งซื้อในเชิงบวกและย้อนกลับตามลำดับตามความต้องการ ผู้ใช้จะต้องได้รับตัววนซ้ำที่เรานำไปใช้เพื่อสำรวจคอลเลกชันได้อย่างง่ายดาย
การห่อหุ้มเป็นสิ่งที่ดีและผู้ใช้จะต้องได้รับตัววนซ้ำเพื่อสำรวจ แต่พวกเขาไม่ต้องกังวลเกี่ยวกับอัลกอริทึมการสำรวจ
ข้อเสียของรูปแบบตัววนซ้ำ:
สำหรับการเดินทางแบบง่าย ๆ (เช่นอาร์เรย์หรือรายการที่สั่งซื้อ) มันยุ่งยากมากกว่าที่จะใช้ตัววนซ้ำและทุกคนอาจรู้สึกว่าเช่น ArrayList เราจะใช้ลูปและรับวิธีการสำรวจคอลเลกชัน
สถานการณ์ที่ใช้งานได้สำหรับโหมดตัววนซ้ำ
รูปแบบตัววนซ้ำเป็น symbiotic และความตายด้วยคอลเลกชัน โดยทั่วไปการพูดตราบใดที่เราใช้คอลเลกชันเราจำเป็นต้องจัดเตรียมตัววนซ้ำของคอลเลกชันในเวลาเดียวกันเช่นคอลเลกชันรายการชุดแผนที่ ฯลฯ ในชวาคอลเลกชันเหล่านี้มีตัววนซ้ำของตัวเอง หากเราต้องการใช้คอนเทนเนอร์ใหม่นี้แน่นอนว่าเราต้องแนะนำรูปแบบตัววนซ้ำเพื่อใช้ตัววนซ้ำสำหรับคอนเทนเนอร์ของเรา
อย่างไรก็ตามเนื่องจากความสัมพันธ์ระหว่างคอนเทนเนอร์และตัววนซ้ำอยู่ใกล้เกินไปภาษาส่วนใหญ่จึงให้ตัววนซ้ำเมื่อใช้คอนเทนเนอร์และคอนเทนเนอร์และตัววนซ้ำที่ได้รับจากภาษาเหล่านี้สามารถตอบสนองความต้องการของเราในกรณีส่วนใหญ่ ดังนั้นจึงเป็นเรื่องยากที่จะฝึกฝนรูปแบบตัววนซ้ำด้วยตัวเอง เราต้องใช้คอนเทนเนอร์ที่มีอยู่และตัววนซ้ำในภาษาเท่านั้น
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น