JAVA 設計模式-回撥模式
轉載於http://www.2cto.com/kf/201503/385522.html
還可以參考一篇 :
http://blog.csdn.net/cauchyweierstrass/article/details/44593807
感謝
開發Android已有兩年了,說來慚愧,回撥雖然隨處可見,並且網上關於回撥函式和介面回撥的內容很多,可一直沒弄明白,總結不明白的原因如下:
1、java的介面定義以及向上轉型是理解回撥的基礎;
使用介面的核心原因:為了能夠向上轉型為多個基型別。即利用介面的多實現,可向上轉型為多個介面基型別。
2、匿名類。
程式碼隨處可見new SthInterface()註冊介面回撥。
感謝csdn兩篇文章讓我徹底理解回撥函式:
其實我很願意理解網上那個關於打電話需求幫助的回撥函式例子
在此我也寫了一個與此類似的例子:
1、首先定義一個介面(即回撥介面)(幫助介面,可以向張三需求幫助,也可以向李四需求幫助,具體需要什麼幫助,後期繫結自己實現。)
?1 2 3 |
public
interface
HelperInterface {
void
execute();
}
|
2、我們可以讓張三幫助我們解決問題(當然找李四或者王五等) ?
1 2 3 4 5 6 7 |
public
class
HelperZhangsan implements
HelperInterface{
@Override
public
void
execute() {
System.out.println(This
is zhangsan_helper.You can also ask lisi_helper!!);
}
}
|
3、尋求幫助的類,他必須持有幫助的回撥介面,因為找不到張三,可以找李四,只要回撥介面不變,總可以找到幫助的類。 ?
1 2 3 4 5 6 7 8 9 10 11 |
public
class
Ask {
private
HelperInterface helperInterface; public
void
setHelperInterface(HelperInterface helperInterface){ //註冊
this .helperInterface
= helperInterface;
}
public
void
resultForAsk(){
helperInterface.execute();
}
}
|
4、測試程式碼類 ?
1 2 3 4 5 6 7 |
public
class
Test {
public
static
void
main(String[] args) {
Ask
ask = new
Ask();
ask.setHelperInterface( new
HelperZhangsan());
ask.resultForAsk();
}
}
|
其實很多時候我們更願意如下這種寫法,也即找個匿名介面實現類幫助我們():
?
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public
class
Test {
public
static
void
main(String[] args) {
Ask
ask = new
Ask();
ask.setHelperInterface( new
|