发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 SOA

反射和动态类方法调用,你选择哪个?

         
2003-08-01 18:08
赞助商链接

大致描述一下我遇到的情况,请大家帮忙耐心看看:)

在方法X里,需要通过变量type来决定调用某个类的dispatch()方法。具体调用哪个类
的dispatch()方法,是根据type决定的。这些类的dispatcher()方法的参数和返回值
是一样的。于是想到把这些类作一个接口

pdfublic interface Handler
{
public Response dispatch(Request request);
}

每个具体的Handler类实现这个接口。
在方法X中先解析一个XML配置文件,大致如下:

<handler type="aaa">
<handlerClass>net.yadan.AHandler</handlerClass>
</handler>
......

根据这个xml文件的type决定具体的Handler类。
方法X大致如下:

public Response X(Request request)
{
String clsName = //根据type得到handlerClass类名,如"net.yadan.AHandler"
Object obj = Class.forName(clsName).newInstance();
Handler handler = (Handler)obj;
return handler.dispatch(request);
}


这样作应该没有问题。但方法X是所有访问的入口,因此可能会在短时间内调用多次,
每次都new一个具体的Handler,我觉得开销太大(是不是这样??),因此我想把
Handler的dispatch()方法做成静态方法,然后用反射机制调用。但我试了,发现
静态方法不能重载,因此不能用接口,只能把具体的Handler类写成互不关联的类,
只是恰好要调用的方法名相同罢了。
不知道上面分析的是否正确,请大家指导指正!

另外,哪位能够提供 利用反射机制调用一个类的静态方法的函数实现。谢谢!:)
方法名如下:

public Object [] invokeStaticMethod(String className, String methodName, Object [] args)




2003-08-01 18:15

我觉得你可以在X中作cache,将Object obj保存在hashmap中,下次从hashmap中取,这样每次都使用反射机制。

你这实际上是个COmmand模式,这样做挺好,我觉得没有必要使用静态方法。

2003-08-01 19:00

明白了!谢谢banq!

是这样吧:
在X中,要得到type=***的Handler类,先从一个静态map中找,如果找到就用那个对象,如果没找到,就new一个,然后存到map中。这样每个Handler类只需要new一次!彻底不要静态方法了,而且保证了接口一致性,8错8错!:)

反射      Command命令模式     

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com