作者JGC18 (JGC)
看板java
標題[問題] 由外層替換內層的function
時間Thu Jan 29 17:53:37 2015
各位先進好
我最近嘗試用java要寫一個專案
但對OO的觀念還不是很好
總是會用到寫C的直覺想法去寫
所以標題下的可能會讓人看不懂,先在此說抱歉
我的問題是這樣的:
class Api
---------------------------
apiMethod()
|
|->------ class A------
classAMethod()
|
|->------ class B -------
classBMethod()
當使用者import class api
使用apiMethod時,會執行到classA中的 classAMethod()
接著會執行到 classB中的 classBMethod
但會遇到一個問題是,classBMethod這個method有部分使用者會需要自己來實做
那我該如何讓使用者能把classBMethod自己override
因為apiMethod跟classAMethod中的流程不會變,所以使用者只需更改classBMethod
我目前想到的作法是,請使用者繼承classB,並把classBMethod override
接著從apiMethod的建構子中把使用者繼承的classB一路傳到classAMethod中
這樣classAMethod再執行classBMethod就會執行到使用者自己override的method
但這樣的方法如果中間又多了一層,我就得一層層傳進去,是否太蠢了@@
不知道有沒有其他作法可以提供給我参考呢?
謝謝指教
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.80.110.112
※ 文章網址: https://www.ptt.cc/bbs/java/M.1422525220.A.4E8.html
推 haha02: 定成抽象方法? 01/29 19:33
推 stiles: 不蠢. classBMethod 往上跳一層 加上 abstract 關鍵字 01/29 20:44
→ ssccg: 把要使用者自己實作的部分抽出來成abstract method 01/29 23:41
→ ssccg: classB改成abstract,另外看不懂你的方法多一層是什麼... 01/29 23:42
→ ssccg: 你的圖是指class A是apiMethod的參數,還是Api的field? 01/29 23:43
→ ssccg: 純參數的話一層一層傳進去很正常啊 01/29 23:46
→ ssccg: 要看合不合理要看你實際class的架構和組成 01/29 23:48
推 swpoker: listener,callback 01/30 13:33
→ adrianshum: 看看 Strategy Pattern 02/01 17:26
→ adrianshum: 不完全是解決你這類的問題,但看過你大概就明白概念了 02/01 17:27