论坛首页 Java企业应用论坛

有好什么办法取代静态方法?

浏览 2887 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-12  
以前对于公用的方法我们经常调用静态方法, 但是如果把这个静态方法抽象成接口的话, 就必须创建实例了, 可以只创建一个实例供大家调用吗?

问题场景:
以前有个CONVERTER例如: NumberFormatter, 有很多静态方法供大家调用, 譬如有个 public static String getNumberString(Integer num).
但是现在要支持根据不同的back-end调用不同的Formatter, 所以抽象一个NumberFormatterInterface, 每个back-end有自己的实现, 但是这样一来每次调用CONVERTER的时候就必须创建一个NumberFormatterInterface的一个实例, 很浪费时间, 大家有没有好的解决方法呢.

可以只生成一个实例CACHE住吗?
   发表时间:2007-07-12  
将每个back-end对应的实现实现为singleton
0 请登录后投票
   发表时间:2007-07-13  
弄个NumberFormatterHome,然后在里面缓存不就OK了
0 请登录后投票
   发表时间:2007-07-13  
SunMicro 写道
将每个back-end对应的实现实现为singleton


like below?
public class MessageFormatterFactory {
public static MessageFormatter getMessageFormatter(String msgType) throws Exception{
if("A".equalsIgnoreCase(msgType)){
return MessageFormatterA.getMessageFormatter();
}else if("B".equalsIgnoreCase(msgType)){
return MessageFormatterB.getMessageFormatter();
}else{
throw new Exception("Not supported message type::" + msgType);
}
}
}


public class MessageFormatterA implements MessageFormatter{
    private static MessageFormatter aFormatter = new MessageFormatterA();
    private MessageFormatterA(){}
    public static MessageFormatter getMessageFormatter(){
        return aFormatter;
    }

public String formatNumber(){}
}
0 请登录后投票
   发表时间:2007-07-13  
大意既是如此,这样便不必每次都创建一个实例了。不过工厂倒是可以再商榷下,这个时候我想使用表驱动应该比使用if更好些。你可以在工厂中定义维护MessageFormatter映射表的逻辑.这样每创建一个新的MessageFormatter,只需向工厂注册,便可供使用,免去了修改工厂,重新编译的麻烦。



0 请登录后投票
   发表时间:2007-07-19  
看到spring中的一句话, 明白了.

Core包是框架的最基础部分, 并提供依赖注入(Dependency Injection)特性来使你可管理Bean容器功能。 这里的基础概念是BeanFactory,它提供Factory模式来消除对程序性单例的需要, 并允许你从程序逻辑中分离出依赖关系的配置和描述。

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics