Предисловие
Обратный вызов означает обратный вызов. Люди, знакомые с программированием Windows, должны быть знакомы с четырьмя словами «функция обратного вызова», но программисты Java могут мало что знать об этом. «Функция обратного вызова» или «метод обратного вызова» является очень важной концепцией в разработке и разработке программного обеспечения. Это очень необходимо для программистов (независимо от того, какой язык).
Недавно я выучил Java и вступил в контакт с механизмом обратного вызова (обратный вызов). Когда я впервые встретился, я чувствовал себя довольно смущенным, и соответствующие объяснения, которые я искал в Интернете, либо просто упомянули, либо сказали просто, как будто я определил обратный вызов. Конечно, после того, как я понял обратный вызов, я пошел прочитать различные объяснения онлайн, и проблем не было. Однако для меня, кто является новичком, мне не хватает постепенного процесса. Здесь я опишу свое личное понимание механизма обратного вызова в порядке от мелкого до глубокого. Если есть неуместность, я надеюсь, что дам вам совет!
Прежде чем начать, представьте себе сценарий: дети детского сада только что выучили дополнение в течение 10.
Глава 1. Происхождение истории
Учитель детского сада написал формулу «1 + 1 =» на доске, а Сяо Мин заполнит пробелы.
Поскольку я выучил добавление менее 10, Сяо Мин может полностью рассчитать этот вопрос. Код для моделирования процесса выглядит следующим образом:
открытый класс Студент {частная строка name = null; public Student (String name) {// todo автоматически сгенерированный конструктор stubthis.name = name;} public void setname (string name) {this.name = name;} private int calcadd (int a, int b) {return a + b;} public fillblac b); System.out.println (имя + "Mental Arithmetic:" + a + " +" + b + "=" + result);}} Когда Сяо Мин заполнял пробелы, он непосредственно рассчитал CLACADD и обнаружил, что результат был 2, и написал результат в пространстве. Тестовый код заключается в следующем:
Общедоступный тест класса {public static void main (string [] args) {int a =; int b =; студент s = новый студент ("xiao ming"); s.fillblank (a, b);}} Результаты работы следующие:
Ментальная арифметика Сяо Мин: 1 + 1 = 2
Этот процесс осуществляется полностью одним объектом Encement только для учащихся класса и не включает механизм обратного вызова.
Глава 2. Поиск проблем для учителей детского сада
Во время перерыва у учителя детского сада внезапно появился прихоть и написал «168 + 291 =» на доске, чтобы Сяо Мин завершил его, а затем вернулся в офис.
Цветочный руб! Почему все учителя не могут ладить с Сяо Мин? Это, очевидно, за пределами правил, хорошо? В настоящее время Сяо Мин, очевидно, не смог завершить его умственной арифметикой, как указанная выше. Когда он был смущен, Сяо Хонг в классе передал калькулятор, который мог только рассчитать добавление (спекуляция)! ! ! ! Сяо Мин узнал, как использовать калькулятор, поэтому он рассчитал результаты через калькулятор и завершил заполнение вдзлатых.
Код для калькулятора:
Открытый калькулятор класса {public int add (int a, int b) {return a + b;}} Измените класс ученика и добавьте метод для использования калькулятора:
Public Class Student {частная строка name = null; public Student (String name) {// todo автоматически сгенерированный конструктор stubthis.name = name;} public void setname (string name) {this.name = name;}@spistresswarnings ("unared") private int calcadd (int ant b) {return a + b;} private usecal int int int int int int usecal Calculator (). Add (a, b);} public void fillblank (int a, int b) {int result = usecalculator (a, b); System.out.println (имя + "Использовать калькулятор:" + a + " +" + b + "=" + result);}} Тестовый код заключается в следующем:
Общедоступный тест класса {public static void main (string [] args) {int a =; int b =; студент s = новый студент ("xiao ming"); s.fillblank (a, b);}} Результаты работы следующие:
Xiao Ming использует калькулятор: 168 + 291 = 459
Механизм обратного вызовов не был вовлечен в этот процесс, но некоторые работы Сяо Мин были перенесены и будут помогать калькулятор.
3. Учитель детского сада вернулся
Когда я обнаружил, что Сяо Мин завершил добавление 3 цифр, учитель думал, что Сяо Мин был очень умным и талантливым. Таким образом, он написал «26549 + 16487 =» на доске, попросив Сяо Мин заполнить заполнение в бланке перед классом, а затем вернулся в офис.
Сяо Мин посмотрел на маленького друга, который развлекался за пределами класса и не мог не чувствовать себя грустным. Если вы не пойдете на игру, этот перерыв будет разрушен! ! ! ! Глядя на калькулятор, который Сяохон снова передал его, Сяо Мин разработал план: пусть Сяхонд сделает это для него.
Сяо Мин сказал Сяхонгу, что вопрос был «26549 + 16487 =», затем указал на конкретное место для заполнения результатов, а затем повеселился.
Здесь мы не реализуем только Xiaohong, но рассматриваем этот калькулятор, который может рассчитать только добавление и Xiaohong в целом, супер калькулятор, который может рассчитать результаты и заполнять пробелы. Параметры, которые должен пройти этот супер калькулятор, - это два дополнения и положение для заполнения пробелов, и это содержимое необходимо заранее проинформировать, то есть Сяо Мин хочет познакомить часть своих методов Сяо Хонгу. Самый простой способ - рассказать Сяо Хонгу его ссылку и два дополнения вместе.
Следовательно, метод добавления суперкалькулятора должен содержать два операнда и ссылку на сам Сяо Минг, код заключается в следующем:
Supercalculator Public Class {public void add (int a, int b, студент Xiaoming) {int result = a + b; xiaoming.fillblank (a, b, result);}} Сяо Мин больше не нуждается в умственной арифметике или калькуляторе, поэтому ему нужно только иметь метод, чтобы попросить Сяхонга о помощи. Код заключается в следующем:
Public Class Student {private String name = null; public Student (String name) {// todo автоматически сгенерированный конструктор stubthis.name = name;} public void setname (string name) {this.name = name;} public void callhelp (int a, int b) {new supercalulator (). Add (a, b, это); Результат) {System.out.println (имя + "поиск расчета Xiaohong:" + a + " +" + b + "=" + result);}} Тестовый код заключается в следующем:
Общественный тест класса {public static void main (string [] args) {int a =; int b =; студент s = новый студент ("xiao ming"); s.callhelp (a, b);}} Результат работы:
Сяо Мин попросил о помощи Сяхонга для расчета: 26549 + 16487 = 43036
Процесс выполнения: Xiao Ming вызывает метод добавления xiaohong (new supercalculator ()) через свой собственный метод Callhelp и ссылается на его собственную ссылку при вызове.
(это) передать его как параметр. После того, как Xiaohong использовал калькулятор, чтобы получить результат, он вызвал метод Fillblank Сяо Мин и заполнил результат в пространстве на доске.
Огни и огни! На этом этапе функция обратного вызова официально дебютировала. Метод Fillblank Сяо Мин - это то, что мы часто обращаем к функции.
Таким образом, можно ясно видеть, что Сяо Мин больше не нужно ждать, пока добавление не будет завершено, и результат будет заполнен на доске, прежде чем он сможет повеселиться со своими друзьями. Работа заполнения в удвоении выполняется Xiaohong, супер-калькулятором. Преимущества обратных вызовов начали отражаться.
ГЛАВА 4. ТЕРЕМА У ДВЕРИ
Есть старушка с седыми волосами у входа в детский сад. Она установила там уличную киоску, продавая нездоровую пищу, которая почти истек каждый день, независимо от ветра и дождя. Поскольку я стар, мой разум немного смущен, и я часто не могу понять, сколько денег я заработал. Однажды она случайно услышала, как Сяо Мин хвастается о том, как она боролась с остроумием и мужеством с учителем детского сада с помощью Сяхонга. Итак, моя свекровь решила найти супер-калькулятор с маленькой красной карточкой как ее маленький помощник и предоставить пачку пряных полос Weilong в качестве награды. Сяхонг не мог устоять перед искушением и согласился.
Оглядываясь назад на код в предыдущей главе, мы обнаружили, что параметры, требуемые методом Add Little Red Card Super Calculator, представляют собой две целочисленные переменные и объект для студентов, но старушка не ученица, а маленький поставщик, поэтому она должна вносить изменения здесь. В этом случае для нас естественно думать о наследовании и полиморфизме. Если мы попросим студента Сяо Мин и поставщика старушки унаследовать от родительского класса, то нам нужно только передать ссылку на родительский класс на маленький супер -калькулятор красной карты.
Однако, в реальном использовании, учитывая единственное наследство Java и не желая слишком много выставлять себя другим, мы используем метод наследования от границы раздела для сотрудничества с внутренними классами.
Другими словами, Xiaohong надеется продолжить предоставлять услуги по расчетам детям в классе в будущем и в то же время предоставлять бухгалтерские услуги старушке и даже расширять бизнес других людей в будущем. Таким образом, она согласилась со всеми клиентами методом объединенной обработки, то есть операндов, которые ей нужны, и как это сделать после завершения расчета. Xiaohong превратил этот унифицированный метод в интерфейс и предоставлен всем, код выглядит следующим образом:
Общественный интерфейс Dojob {public void fillblank (int a, int b, int result);} Поскольку вдохновение пришло от того, чтобы помочь Сяо Мин заполнить пробелы, Сяхонг сохранила свое первоначальное намерение и рассматривала все свое дело как Fillblank.
В то же время Xiaohong модифицировал свой калькулятор, чтобы он мог обрабатывать разных людей, которые реализуют интерфейс Dojob одновременно. Код заключается в следующем:
Общедоступный класс Supercalculator {public void Add (int a, int b, dojob customer) {int result = a + b; customer.fillblank (a, b, result);}} После того, как Сяо Мин и старушка получили этот интерфейс, пока они реализовали этот интерфейс, он эквивалентен тем, чтобы сказать Сяхонгу, чтобы справиться с результатами в унифицированной модели и использования внутренних классов, как упоминалось ранее. Код заключается в следующем:
Сяо Мин:
Public Class Student {private String name = null; public Student (String name) {// todo автоматически сгенерированный конструктор stubthis.name = name;} public void setname (string name) {this.name = name;} public class dohomework wormob {@overridepublic void fillblank (int a, int b, int-result) {//-gener stubsystem.out.println (имя + «поиск расчета Xiaohong:" + a + " +" + b + "=" + result);}} public void callhelp (int a, int b) {new supercalculator (). Добавить (a, b, new dohomework ());}} Старушка:
public class Seller{private String name = null;public Seller(String name){// TODO Auto-generated constructor stubthis.name = name;}public void setName(String name){this.name = name;}public class doHomeWork implements doJob{@Overridepublic void fillBlank(int a, int b, int result){// TODO Auto-generated method stubsystem.out.println (имя + «Ищу помощь xiaohong для урегулирования учетных записей:" + a + " +" + b + "=" + result + "meta");}} public void callhelp (int a, int b) {new supercalculator (). Добавить (a, b, new dohomework ());}}}}}}}}}}}} Процедура тестирования заключается в следующем:
Общедоступный тест класса
Результаты работы следующие:
Сяо Мин попросил помочь Сяхонгу рассчитать: 56 + 31 = 87
Старушка просит помощь Сяохонгу для урегулирования счетов: 26497 + 11256 = 37753 Юань
Последние слова
Ясно видно, что Сяохонг уже рассматривал этот вопрос как карьеру, и вы узнаете об этом, посмотрев на имя, которое она дала интерфейсу Dojob.
Некоторые люди могут спросить, почему старушка может заработать столько денег, установив киоск? Есть ли проблемы с вашей целью? ! Здесь мы говорим, так это механизм обратного вызова! !
Все, что я знаю, это то, что бизнес Сяхонга продолжал расширяться позже, и до окончания детского сада она наконец купила свой первый дом в своей жизни с деньгами, которые она заработала.