浏览 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住吗? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-12
将每个back-end对应的实现实现为singleton
|
|
返回顶楼 | |
发表时间:2007-07-13
弄个NumberFormatterHome,然后在里面缓存不就OK了
|
|
返回顶楼 | |
发表时间: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(){} } |
|
返回顶楼 | |
发表时间:2007-07-13
大意既是如此,这样便不必每次都创建一个实例了。不过工厂倒是可以再商榷下,这个时候我想使用表驱动应该比使用if更好些。你可以在工厂中定义维护MessageFormatter映射表的逻辑.这样每创建一个新的MessageFormatter,只需向工厂注册,便可供使用,免去了修改工厂,重新编译的麻烦。
|
|
返回顶楼 | |
发表时间:2007-07-19
看到spring中的一句话, 明白了.
Core包是框架的最基础部分, 并提供依赖注入(Dependency Injection)特性来使你可管理Bean容器功能。 这里的基础概念是BeanFactory,它提供Factory模式来消除对程序性单例的需要, 并允许你从程序逻辑中分离出依赖关系的配置和描述。 |
|
返回顶楼 | |