Java 回调机制
回調: 是一種常見的設計模式.在這種模式中可以指出某個特定事件發生時應采取的動作
回調的思想是:
- 類A的a()方法調用類B的b()方法
- 類B的b()方法執行完畢主動調用類A的callback()方法
為了理解上面的會 寫一個demo
老師讓leon 算一個算術題,leon使用計算器算出結果,
創建一個學生類
package callback;public class Student {private String name;public Student(String name) {this.name = name;}public void setName(String name) {this.name = name;}public void callHelp(int a, int b) {new Calculator().add(a, b, this);//調用計算器的add方法}public void fillResult(int a, int b, int result) {System.out.println(name + "計算幫助的:" + a + " + " + b + " = " + result);}
}
創建一個計算器的類
package callback;public class Calculator {public void add(int a, int b, Student leon) {int result = a + b; //計算結果/*** 計算機回調Student類的fillResult* 我們稱fillResult為回調函數* 上面的 類A的a()方法調用類B的b()方法* 類B的b()方法執行完畢主動調用類A的callback()方法* */leon.fillResult(a, b, result);}
}
驗證結果創建一個Main類 輸出結果
package callback;
public class Mian {public static void main(String[] args) {int a = 66;int b = 18;Student s = new Student("leon");s.callHelp(a, b);}
}
以上就是回調的理解
但是有沒有發現實際開發中并沒有這樣試過過 ,沒有擴展性加入現在leon 的朋友 ted要借他的計算器使用?
修改如下
1 需要吧寫入結果fillResult抽成一個接口如下
package callback;
public interface Commonality{void fillResult(int a, int b, int result);
}
2 Student 類
package callback;public class Student implements Commonality {private String name;public Student(String name) {this.name = name;}public void setName(String name) {this.name = name;}@Overridepublic void fillResult(int a, int b, int result) {System.out.println(name + "計算幫助的:" + a + " + " + b + " = " + result);}public void callHelp(int a, int b) {new Calculator().add(a, b, new Student(name));}}
3 計算器的類
package callback;public class Calculator {public void add(int a, int b, Commonality commonality) {int result = a + b; //計算結果/*** 計算機回調Student類的fillResult* 我們稱fillResult為回調函數* 上面的 類A的a()方法調用類B的b()方法* 類B的b()方法執行完畢主動調用類A的callback()方法*/commonality.fillResult(a, b, result);}
}
新建 朋友類
package callback;public class Companion implements Commonality{private String name;public Companion(String name) {this.name = name;}public void setName(String name) {this.name = name;}@Overridepublic void fillResult(int a, int b, int result) {System.out.println(name + "計算幫助的:" + a + " + " + b + " = " + result);}public void callHelp(int a, int b) {new Calculator().add(a, b, new Student(name));}}
?
Main 方法
package callback;
public class Mian {public static void main(String[] args) {int a = 66;int b = 18;Student s = new Student("leon");s.callHelp(a, b);int c=18;int d=29;Companion companion = new Companion("ted");companion.callHelp(c,d);}
}
?
輸出結果
?
文章參考課本,以及其他人博客,忘記別人博客地址了,這里記錄下
總結
- 上一篇: 美国恐怖故事第二季资源,求。
- 下一篇: 兰亭序真迹在哪里