作者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://webptt.com/cn.aspx?n=bbs/java/M.1422525220.A.4E8.html
1F:推 haha02: 定成抽象方法? 01/29 19:33
2F:推 stiles: 不蠢. classBMethod 往上跳一层 加上 abstract 关键字 01/29 20:44
3F:→ ssccg: 把要使用者自己实作的部分抽出来成abstract method 01/29 23:41
4F:→ ssccg: classB改成abstract,另外看不懂你的方法多一层是什麽... 01/29 23:42
5F:→ ssccg: 你的图是指class A是apiMethod的参数,还是Api的field? 01/29 23:43
6F:→ ssccg: 纯参数的话一层一层传进去很正常啊 01/29 23:46
7F:→ ssccg: 要看合不合理要看你实际class的架构和组成 01/29 23:48
9F:推 swpoker: listener,callback 01/30 13:33
10F:→ adrianshum: 看看 Strategy Pattern 02/01 17:26
11F:→ adrianshum: 不完全是解决你这类的问题,但看过你大概就明白概念了 02/01 17:27