※ 引述《liu2007 (薯)》之銘言:
: 網路上關於callback的範例都是
: 1.先寫interface,有哪些callback method
: 2.再寫一個class implement這些callback method
: 3.要用的時候宣告interface形態的變數 A,再把有implement interface的型態的變數 B
: asign給變數 A ,這樣 A 就可以使用 B 變數的callback
: 我自己對於callback的理解除了網路上講的"寫給別人呼叫"之外,
: 就是"不想直接給你整個instance的指標,但是給你[可以執行某些method]的指標 "
: 可是雖然我只有上述的變數 A ,但如果我知道asign給他的是變數 B ,那我用cast就等於
: 得到了 B ,這樣跟我所認知的就有所違背了
: 那請問我的想法是錯在哪邊?
: 是我所理解的那件事情的解答並不是callback?
: 還是我少了什麼code??
其實是java太多餘
例如我要寫個可以OCP的邏輯元件->取得不同條件的薪水
給予 person物件 ,得出person應有的薪水
person有很多種,這裡舉例為
1.魯蛇(person)
2.溫拿(person)
3.路人(person)
.....
然後寫個方法來得出薪水(這裡超多種實作)
我暫定剛開始是
getSalary(person):
if person is 魯蛇:
return 22k;
if person is 溫拿:
return 88k;
if person is 路人:
return 執骰子()*22k;
return 0;
當然隨著person的很多~所以該方法其實並不是很好~一直改也不是辦法
所以這裡就可以用callback拉
getSalary(salaryType):
return salarytype();
int salary=getSalary(魯蛇salarytype);
以上是將if轉換成callback的初步想法
但想法要如何實作,這就要根據語言了
java:
public interface SalaryType{
public int getSalary();
}
public class 魯蛇SalaryType implements SalaryType{
public int getSalary(){
return 22000;
}
}
SalaryType st = new 魯蛇SalaryType();
int salary = getSalary(st);
(此為範例~如為真正實作~我不會這樣寫~)
python:
def 魯蛇salarytype():
return 22000
def getSalary(salarytype):
return salarytype();
salary = getSalary(魯蛇salarytype);
其實我要說的是
callback也是個概念而已
並不是每種語言的實作都是一樣的
雖然java在這方面實在很多餘
但我還是覺得這還是好的
所以當要開始實作時,必須要先了解該語言的特性為何
而不是為什麼語言A可以~而語言B不行的這種想法
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.29.28.131