首先先介紹回調函數的概念。比如客戶端client,想要調用服務器端server的某個函數為你提供服務。比如炒西紅柿炒蛋,cookTomato() 這時候,服務器端說,你先付錢才能為你服務,這時候服務器端要調用客戶端的getMoney().才能為你繼續服務。這里的getMoney就是回調函數了。而且這}getMoney()方法是一個接口方法,因為客戶端只要給錢就好,不管是人民幣還是美元,我都接受。
public interface Money(){
//要被回調的方法
void float getMoney();
}
public class Server { ??? //用Money接口作為參數 ?public boolean cookTomatoWithEgg(Money money){ ? System.out.println("有人要西紅柿操蛋了,先給我錢,8元以上我才給你炒"); ? ? if( money.getMoney() >= 8){ ? ?? System.out.println("開始洗西紅柿"); ?? System.out.println("開始炒菜"); ?? System.out.println("完成了"); ?? return true; ? } ????? return false; ?} ? ? }
public class Client { ??? //吃中飯了想要西紅柿操蛋, ?public static void haveLunch(Server server){ ? ? boolean result = server.cookTomatoWithEgg(new Money() { ?? ?? @Override ?? public float getMoney() { ??? System.out.println("回調方法,我付5元,人民幣"); ??? return 5; ?? } ? }); ? ? if(!result){ ?? System.out.println("錢不夠"); ? } ???????? result = server.cookTomatoWithEgg(new Money() { ?? ?? @Override ?? public float getMoney() { ??? System.out.println("回調方法,我付10元,人民幣"); ??? return 10; ?? } ? }); ???????? if(result){ ??? System.out.println("終于吃到吃西紅柿操蛋"); ?? } ?} ? ? ?/** ? * @param args ? */ ?public static void main(String[] args) { ? Client client = new Client(); ? Server server = new Server(); ? client.haveLunch(server);
?}
}
?
分享:http://jxg198168.iteye.com/blog/1885921