关于jive中ForumFactory.getInstance()的困惑

03-07-25 hhquan

下面是java模式的一篇文章中所说:

“我们已经知道,使用Forum需要通过ForumProxy,Jive中创建一个Forum是使用Factory模式,有一个总的抽象类ForumFactory,在这个抽象类中,调用ForumFactory是通过getInstance()方法实现,这里使用了Singleton(也是设计模式之一,由于介绍文章很多,我就不写了,看这里),getInstance()返回的是ForumFactoryProxy.”

我感觉ForumFactory.getInstance(authorization)方法中好像不是Singleton模式,因为最终返回的是new ForumFactoryProxy(authorization, factory, factory.getPermissions(authorization));每次都new一个新对象难道还是Singleton模式吗?

另外,对于相同的authorization,其实产生的ForumFactory是相同的,这里是否应该用享元模式呐?不必每次都产生一个新的ForumFactory对象。

请发表意见。我刚刚学习设计模式,请指教

freedomjdon
2003-07-26 13:18

我也一样啊!好象返回的是一个代理,而不是一个ForumFactory,如果该论坛不存在则创建一个(factory = (ForumFactory)c.newInstance();

),最后是返回一个访问ForumFactoryProxy用以控制对唯一的ForumFactory对象的访问,不知道我的理解对不对哦。

hhquan
2003-07-28 09:19

好像应该这样理解FormFactory.getInstance()方法

if (factory == null) {

String classname="DbForumFactory";

Class c = Class.forName(className);

factory = (ForumFactory)c.newInstance();

}

该方法中这部分使用了单例模式,也就是产生唯一的DbForumFactory对象。

但是整个方法的返回值却是一个新的FormProxyFactory对象。

给我感觉每次不必都返回一个新的FormProxyFactory对象,因为对于相同权限的用户(具有相同的authorization),得到的FormProxyFactory对象应该相同。这里是否应该把相同authorization的FormProxyFactory对象共享呐?好像是享元模式。请指教

banq
2003-07-28 12:25

单态的目的是为了让FormFactory只有一个实例,至于返回了FormFactory的一个子类,可以看成它想实施一个动态代理,只是使用了这个简单的办法。