作者homeycat (xx)
看板java
标题Re: [问题] 从文字档读取演算法
时间Fri Aug 21 11:31:51 2009
※ 引述《eicsarch (Eics)》之铭言:
: 想问各位大大,假设我做一个比大小的程式
: 就是输入好几个数字来比,用的演算法是想用排的
: 可是我希望就是主程式和演算法是分开的,让我随时可以替换我用的演算法
: 那程式,也就是jar的部分就比较属於输入数字的部分
: 而汇入的档案就决定了比较的演算法,汇入的档案是什麽都没关系
: 重点是在於演算法可以替换,如果是将我的数字传给另一个程式作不知道行不行
: 这样也是有达到替换的效果
: 像这种技巧大概是要看什麽内容的书呢?
: 因为不知道这种方法叫什麽,找了很多关键字都不是我要的
: 麻烦各位帮我解答一下,谢谢
我想你的需求应该是一个介面
透过这个介面主程式可以透过同一组method去执行各个演算法(class)
主程式不用管演算法里面是怎麽做的
而演算法里也不用假设主程式会怎麽呼叫它
只要把这组method写好,让主程式可以用介面把它们「接起来」即可
如果我的理解没有错的话= =
那麽java语言特性里的「介面」应该可以达到你要的效果
介面可以透过语法的继承(extends)或介面(interface)来实作
我写了一个范例:
example.algos.MaxMinAlgo 定义了一个演算法(算max和min)的介面
example.algos.MaxMinAlgoLoader 则是用来实体化的class loader
example.algos.maxmin.* 里面的class实作了MaxMinAlgo这个介面 (语法上
我是用继承,这样可以不用确实实作每个method)
由於我将整个netbeans project包起来了,所以烦请至此下载:
http://www.badongo.com/file/16704708
事实上
很多软体的「plugin」机制都是以这个方式来实作的
主程式跟plugin可以分开编译
要用时主程式再去把它找出来
然後透过已经定义好的介面就可以执行它
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.128.72
1F:推 eicsarch:好优 又多学一种方法了 感谢 目前学会了classloader而已 08/21 14:31
2F:→ eicsarch:如果用介面的话,可以像动态载入那样随时抽换掉class吗 08/21 14:35
3F:推 qrtt1:那麽要求动态,那去试试 osgi 吧。 08/21 22:35
4F:→ homeycat:这个范例就是动态载入的方式... 08/22 00:00
5F:推 qrtt1:您提供的范例只是在现有的 CL 上用 reflection 而已啊@@ 08/22 08:54