คำนำ
การโทรกลับหมายถึงการโทรกลับ คนที่คุ้นเคยกับการเขียนโปรแกรม Windows จะต้องคุ้นเคยกับสี่คำว่า "ฟังก์ชั่นการโทรกลับ" แต่โปรแกรมเมอร์ Java อาจไม่รู้เรื่องนี้มากนัก "ฟังก์ชั่นการโทรกลับ" หรือ "วิธีการโทรกลับ" เป็นแนวคิดที่สำคัญมากในการออกแบบและพัฒนาซอฟต์แวร์ เป็นสิ่งจำเป็นสำหรับโปรแกรมเมอร์ (ไม่ว่าภาษาใด)
เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้ Java และติดต่อกับกลไกการโทรกลับ (โทรกลับ) เมื่อฉันพบกันครั้งแรกฉันรู้สึกสับสนมากและคำอธิบายที่เกี่ยวข้องที่ฉันค้นหาทางออนไลน์ก็แค่พูดถึงหรือพูดง่าย ๆ ราวกับว่าฉันได้กำหนดโทรกลับ แน่นอนหลังจากที่ฉันเข้าใจการโทรกลับฉันไปอ่านคำอธิบายต่าง ๆ ทางออนไลน์และไม่มีปัญหา อย่างไรก็ตามสำหรับฉันที่เป็นผู้เริ่มต้นฉันขาดกระบวนการค่อยเป็นค่อยไป ที่นี่ฉันจะอธิบายความเข้าใจส่วนตัวของฉันเกี่ยวกับกลไกการโทรกลับตามลำดับจากตื้นจนถึงลึก หากมีความไม่เหมาะสมฉันหวังว่าฉันจะให้คำแนะนำกับคุณ!
ก่อนที่จะเริ่มลองนึกภาพสถานการณ์: เด็กอนุบาลเพิ่งเรียนรู้เพิ่มเติมภายใน 10
บทที่ 1 ต้นกำเนิดของเรื่องราว
ครูอนุบาลเขียนสูตร "1 + 1 =" บนกระดานดำและเสี่ยวหมิงจะเติมลงในช่องว่าง
เนื่องจากฉันได้เรียนรู้การเพิ่มน้อยกว่า 10, Xiao Ming สามารถคำนวณคำถามนี้ได้ทั้งหมดด้วยตัวเอง รหัสเพื่อจำลองกระบวนการมีดังนี้:
นักเรียนชั้นเรียนสาธารณะ {ชื่อสตริงส่วนตัว = null; นักเรียนสาธารณะ (ชื่อสตริง) {// toDo constructor ที่สร้างขึ้นอัตโนมัติ stubthis.name = ชื่อ;} โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name;} private int calcadd (int a, int b) {return a + b; b); system.out.println (ชื่อ + "ทางจิตทางจิต:" + a + " +" + b + "=" + ผลลัพธ์);}} เมื่อเสี่ยวหมิงเติมช่องว่างเขาคำนวณ clacadd โดยตรงและพบว่าผลลัพธ์คือ 2 และเขียนผลลัพธ์ในพื้นที่ รหัสทดสอบมีดังนี้:
การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int a =; int b =; นักเรียน s = นักเรียนใหม่ ("Xiao Ming"); s.fillblank (a, b);}} ผลการดำเนินการมีดังนี้:
เลขคณิตจิตของ Xiao Ming: 1 + 1 = 2
กระบวนการนี้ดำเนินการโดยวัตถุอินสแตนซ์ของชั้นเรียนนักเรียนเพียงอย่างเดียวและไม่เกี่ยวข้องกับกลไกการโทรกลับ
บทที่ 2. การค้นหาปัญหาสำหรับครูอนุบาล
ในช่วงพักครูโรงเรียนอนุบาลก็มีความตั้งใจและเขียนว่า "168 + 291 =" บนกระดานดำเพื่อให้เสี่ยวหมิงทำเสร็จแล้วกลับไปที่สำนักงาน
ดอกไม้ถู! เหตุใดครูทุกคนจึงไม่สามารถเข้ากับเสี่ยวหมิงได้ เห็นได้ชัดว่ามันเกินกว่ากฎโอเค? ในเวลานี้เสี่ยวหมิงเห็นได้ชัดว่าไม่สามารถทำมันได้ด้วยเลขคณิตทางจิตเหมือนข้างต้น เมื่อเขาสับสนเสี่ยวฮงในชั้นเรียนส่งเครื่องคิดเลขที่สามารถคำนวณเพิ่มเติมได้ (Profiteer)! - - - Xiao Ming เกิดขึ้นเพื่อรู้วิธีใช้เครื่องคิดเลขดังนั้นเขาจึงคำนวณผลลัพธ์ผ่านเครื่องคิดเลขและเสร็จสิ้นการเติมเต็มในช่องว่าง
รหัสสำหรับเครื่องคิดเลขคือ:
เครื่องคิดเลขคลาสสาธารณะ {public int add (int a, int b) {return a + b;}} ปรับเปลี่ยนชั้นเรียนของนักเรียนและเพิ่มวิธีการใช้เครื่องคิดเลข:
นักเรียนชั้นเรียนสาธารณะ {ชื่อสตริงส่วนตัว = null; นักเรียนสาธารณะ (ชื่อสตริง) {// todo constructor ที่สร้างขึ้นอัตโนมัติ stubthis.name = name;} โมฆะสาธารณะ setname (ชื่อสตริง) {this.name = name;}@suppresswarnings ("ไม่ได้ใช้" เครื่องคิดเลข (). เพิ่ม (a, b);} โมฆะสาธารณะ fillblank (int a, int b) {int result = usecalculator (a, b); system.out.println (ชื่อ + "ใช้เครื่องคิดเลข:" + a + " +" + b + "=" + ผลลัพธ์);}}}}}} รหัสทดสอบมีดังนี้:
การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int a =; int b =; นักเรียน s = นักเรียนใหม่ ("Xiao Ming"); s.fillblank (a, b);}} ผลการดำเนินการมีดังนี้:
Xiao Ming ใช้เครื่องคิดเลข: 168 + 291 = 459
กลไกการโทรกลับไม่ได้มีส่วนร่วมในกระบวนการนี้ แต่งานของเซียวหมิงบางส่วนได้รับการถ่ายโอนและจะได้รับความช่วยเหลือจากเครื่องคิดเลข
3. ครูอนุบาลกลับมาแล้ว
เมื่อฉันพบว่าเสี่ยวหมิงได้เพิ่มตัวเลข 3 หลักเสร็จแล้วครูคิดว่าเสี่ยวหมิงฉลาดมากและมีความสามารถพิเศษ ดังนั้นเขาจึงเขียนว่า "26549 + 16487 =" บนกระดานดำขอให้เสี่ยวหมิงเติมเต็มช่องว่างก่อนเข้าเรียนแล้วกลับไปที่สำนักงาน
เสี่ยวหมิงมองเพื่อนตัวน้อยที่สนุกนอกห้องเรียนและอดไม่ได้ที่จะรู้สึกเศร้า หากคุณไม่ออกไปเล่นการพักนี้จะถูกทำลาย! - - - เมื่อมองไปที่เครื่องคิดเลขที่เสี่ยวฮงส่งมาอีกครั้งเสี่ยวหมิงคิดแผน: ให้เสี่ยวฮงทำเพื่อเขา
Xiao Ming บอก Xiaohong ว่าคำถามคือ "26549 + 16487 =" จากนั้นชี้ให้เห็นตำแหน่งที่เฉพาะเจาะจงสำหรับการกรอกผลลัพธ์และจากนั้นก็ออกไปสนุก
ที่นี่เราไม่ได้ใช้ Xiaohong เพียงอย่างเดียว แต่คำนึงถึงเครื่องคิดเลขนี้ที่สามารถคำนวณเพิ่มเติมและ Xiaohong โดยรวมเครื่องคิดเลขที่ยอดเยี่ยมที่สามารถคำนวณผลลัพธ์และเติมช่องว่างได้ พารามิเตอร์ที่ Super Calculator ต้องผ่านเป็นสองส่วนเพิ่มเติมและตำแหน่งในการเติมช่องว่างและเนื้อหาเหล่านี้จำเป็นต้องได้รับการแจ้งล่วงหน้านั่นคือ Xiao Ming ต้องการเปิดเผยวิธีการบางส่วนของ Xiao Hong วิธีที่ง่ายที่สุดคือการบอก Xiao Hong การอ้างอิงของเขาและการเพิ่มเติมทั้งสองด้วยกัน
ดังนั้นวิธีการเพิ่มของ supercalculator ควรมีตัวถูกดำเนินการสองตัวและอ้างอิงถึง Xiao Ming เองรหัสมีดังนี้:
SuperCalculator ระดับสาธารณะ {โมฆะสาธารณะเพิ่ม (int a, int b, นักเรียน xiaoming) {int result = a + b; xiaoming.fillblank (a, b, ผลลัพธ์);}} Xiao Ming ไม่ต้องการเลขคณิตทางจิตหรือเครื่องคิดเลขอีกต่อไปดังนั้นเขาจึงต้องมีวิธีการขอความช่วยเหลือจาก Xiaohong รหัสมีดังนี้:
นักเรียนชั้นเรียนสาธารณะ {ชื่อสตริงส่วนตัว = null; นักเรียนสาธารณะ (ชื่อสตริง) {// todo constructor ที่สร้างขึ้นอัตโนมัติ stubthis.name = name;} โมฆะสาธารณะ setname (ชื่อสตริง) {this.name = name;} โมฆะสาธารณะ callhelp (int a, int b) ผลลัพธ์) {system.out.println (ชื่อ + "การค้นหาสำหรับการคำนวณ Xiaohong:" + a + " +" + b + "=" + ผลลัพธ์);}} รหัสทดสอบมีดังนี้:
การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int a =; int b =; นักเรียน s = นักเรียนใหม่ ("Xiao Ming"); S.CallHelp (a, b);}} ผลการทำงานคือ:
Xiao Ming ขอความช่วยเหลือ Xiaohong ในการคำนวณ: 26549 + 16487 = 43036
กระบวนการดำเนินการคือ: Xiao Ming เรียกวิธีการเพิ่มของ Xiaohong (ใหม่ supercalculator ()) ผ่านวิธี CallHelp ของเขาเองและอ้างอิงการอ้างอิงของเขาเองเมื่อโทร
(นี้) ส่งผ่านเป็นพารามิเตอร์ หลังจาก Xiaohong ใช้เครื่องคิดเลขเพื่อให้ได้ผลลัพธ์เขาเรียกวิธี Fillblank ของ Xiao Ming Back และเติมผลลัพธ์ในพื้นที่บนกระดานดำ
ไฟและไฟ! ณ จุดนี้ฟังก์ชั่นการโทรกลับอย่างเป็นทางการเปิดตัว วิธี Fillblank ของ Xiao Ming คือสิ่งที่เรามักจะโทรกลับ
ด้วยวิธีนี้จะเห็นได้อย่างชัดเจนว่าเสี่ยวหมิงไม่ต้องรออีกต่อไปจนกว่าการเพิ่มจะเสร็จสิ้นและผลลัพธ์จะเต็มไปด้วยกระดานดำก่อนที่เขาจะสนุกกับเพื่อนของเขา งานเติมเต็มในช่องว่างทำโดย Xiaohong ซึ่งเป็นเครื่องคิดเลขซูเปอร์ ข้อดีของการโทรกลับได้เริ่มขึ้นแล้ว
บทที่ 4 แม่สามีที่ประตู
มีหญิงชราคนหนึ่งที่มีผมหงอกที่ทางเข้าโรงเรียนอนุบาล เธอตั้งแผงขายของที่นั่นขายอาหารขยะที่เกือบจะหมดอายุทุกวันโดยไม่คำนึงถึงลมและฝน เพราะฉันแก่แล้วใจของฉันสับสนเล็กน้อยและฉันมักจะคิดไม่ออกว่าฉันได้รับเงินมากแค่ไหน อยู่มาวันหนึ่งเธอได้ยินเซียวหมิงโดยบังเอิญเกี่ยวกับวิธีที่เธอต่อสู้กับปัญญาและความกล้าหาญกับครูอนุบาลด้วยความช่วยเหลือของเสี่ยวฮง ดังนั้นแม่สามีของฉันจึงตัดสินใจที่จะหาเครื่องคิดเลขซุปเปอร์การ์ดสีแดงเล็ก ๆ น้อย ๆ ให้เป็นผู้ช่วยตัวน้อยของเธอและจัดหาแถบเผ็ด Weilong เป็นรางวัลเป็นรางวัล Xiaohong ไม่สามารถต้านทานการล่อลวงและเห็นด้วย
เมื่อมองย้อนกลับไปที่รหัสในบทก่อนหน้าเราพบว่าพารามิเตอร์ที่ต้องการโดยวิธีการเพิ่มของเครื่องคิดเลขซุปเปอร์การ์ดสีแดงเล็ก ๆ คือตัวแปรจำนวนเต็มสองตัวและวัตถุนักเรียน แต่หญิงชราไม่ใช่นักเรียน แต่เป็นผู้ขายรายเล็กดังนั้นเธอจึงต้องทำการดัดแปลงที่นี่ ในกรณีนี้มันเป็นเรื่องธรรมดาที่เราจะนึกถึงมรดกและความหลากหลาย หากเราขอให้นักเรียนเสี่ยวหมิงและผู้ขายของหญิงชรารับมรดกจากชั้นเรียนผู้ปกครองเราก็ต้องผ่านการอ้างอิงไปยังชั้นเรียนหลักไปยังเครื่องคิดเลขการ์ดสีแดงเล็ก ๆ น้อย ๆ
อย่างไรก็ตามในการใช้งานจริงเมื่อพิจารณาการสืบทอดมรดกเดียวของ Java และไม่ต้องการเปิดเผยตัวเองมากเกินไปกับผู้อื่นเราใช้วิธีการสืบทอดจากอินเทอร์เฟซเพื่อร่วมมือกับชั้นเรียนภายใน
กล่าวอีกนัยหนึ่งเสี่ยวฮงหวังที่จะให้บริการการคำนวณแก่เด็ก ๆ ในชั้นเรียนในอนาคตและในขณะเดียวกันก็ให้บริการบัญชีแก่หญิงชราและยังขยายธุรกิจของผู้อื่นในอนาคต ดังนั้นเธอจึงเห็นด้วยกับลูกค้าทุกคนด้วยวิธีการประมวลผลแบบครบวงจรนั่นคือตัวถูกดำเนินการที่เธอต้องการและวิธีการทำหลังจากทำการคำนวณเสร็จสิ้น Xiaohong ได้สร้างวิธีการแบบครบวงจรนี้ลงในอินเทอร์เฟซและให้กับทุกคนรหัสมีดังนี้:
อินเทอร์เฟซสาธารณะ dojob {โมฆะสาธารณะ Fillblank (int a, int b, int result);} เนื่องจากแรงบันดาลใจมาจากการช่วยเสี่ยวหมิงเติมเต็มในช่องว่างเซียวฮงยังคงรักษาความตั้งใจดั้งเดิมของเธอและปฏิบัติต่อธุรกิจทั้งหมดของเธอในฐานะ Fillblank
ในเวลาเดียวกัน Xiaohong ได้ปรับเปลี่ยนเครื่องคิดเลขของเขาเพื่อให้สามารถจัดการคนต่าง ๆ ที่ใช้อินเตอร์เฟส DOJOB ในเวลาเดียวกัน รหัสมีดังนี้:
Public Class SuperCalculator {โมฆะสาธารณะเพิ่ม (int a, int b, ลูกค้า doJob) {int result = a + b; customer.fillblank (a, b, ผลลัพธ์);}} หลังจาก Xiao Ming และ Old Lady ได้อินเทอร์เฟซนี้ตราบใดที่พวกเขาใช้อินเทอร์เฟซนี้มันก็เทียบเท่ากับการบอก Xiaohong ถึงวิธีที่จะจัดการผลลัพธ์ในรูปแบบที่เป็นเอกภาพและใช้คลาสภายในตามที่กล่าวไว้ก่อนหน้านี้ รหัสมีดังนี้:
Xiao Ming's:
นักเรียนชั้นเรียนสาธารณะ {ชื่อสตริงส่วนตัว = null; นักเรียนสาธารณะ (ชื่อสตริง) {// todo constructor ที่สร้างขึ้นอัตโนมัติ stubthis.name = name;} โมฆะสาธารณะ setname (ชื่อสตริง) {this.name = name;} คลาสสาธารณะ Stubsystem.out.println (ชื่อ + "การค้นหาการคำนวณ Xiaohong:" + a + " +" + b + "=" + ผลลัพธ์);}} โมฆะสาธารณะ callhelp (int a, int b) {ใหม่ supercalculator () เพิ่ม (a, b, new dohomework (); หญิงชรา:
ผู้ขายคลาสสาธารณะ {ชื่อสตริงส่วนตัว = null; ผู้ขายสาธารณะ (ชื่อสตริง) {// toDo constructor ที่สร้างขึ้นอัตโนมัติ stubthis.name = name;} โมฆะสาธารณะ setname (ชื่อสตริง) {this.name = name;} คลาสสาธารณะ Stubsystem.out.println (ชื่อ + "การค้นหาความช่วยเหลือ Xiaohong เพื่อชำระบัญชี:" + a + " +" + b + "=" + ผลลัพธ์ + "meta");}} โมฆะสาธารณะ callhelp (int a, int b) {ใหม่ supercalculator () ขั้นตอนการทดสอบมีดังนี้:
การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int a =; int b =; int c =; int d =; นักเรียน s = นักเรียนใหม่ ("Xiao Ming"); ผู้ขาย S = ผู้ขายใหม่ ("Grandma"); S.CallHelp (a, b); ผลการดำเนินการมีดังนี้:
Xiao Ming ขอความช่วยเหลือ Xiaohong ในการคำนวณ: 56 + 31 = 87
หญิงชราขอความช่วยเหลือจาก Xiaohong เพื่อชำระบัญชี: 26497 + 11256 = 37753 หยวน
คำสุดท้าย
จะเห็นได้อย่างชัดเจนว่าเสี่ยวฮงได้ปฏิบัติต่อเรื่องนี้แล้วว่าเป็นอาชีพและคุณจะรู้ด้วยการดูชื่อที่เธอให้อินเทอร์เฟซ dojob
บางคนอาจถามว่าทำไมหญิงชราสามารถทำเงินได้มากด้วยการตั้งแผงขายของ? มีปัญหากับการโฟกัสของคุณหรือไม่? - สิ่งที่เรากำลังพูดถึงที่นี่คือกลไกการโทรกลับ! -
ทั้งหมดที่ฉันรู้ก็คือธุรกิจของ Xiaohong ยังคงขยายตัวในภายหลังและก่อนที่จะจบการศึกษาจากโรงเรียนอนุบาลในที่สุดเธอก็ซื้อบ้านหลังแรกของเธอในชีวิตของเธอด้วยเงินที่เธอได้รับ