Jive代码中AuthorizationFactory类
昨天看jive源码的时候,看到AuthoricationFactory这个类,觉得其中有一个方法实现得很巧妙。如下:
|
将sychronized(className)将className这个变量上锁,防止了多个线程并发执行时其他线程对className进行写操作。例如,假如不上锁,线程一执行完className=classNameProp时,线程二执行了
className ="com.jivesoftware.forum.database.DbAuthorizationFactory";那么便可能改变了clasName的值。而且将factory==null放在synchronized(className)的外层,可以省下不少开销。
问题一、这里的为什么要使用单例模式?是为了只产生一个该类的实现类的实例而节省内存?
问题二、这里的单例模式也有些奇怪,既然将className都上锁了,为什么还要在内部再加一个
if(factory == nullll)?
问题三、这里的工厂中取得子类是通过持有自身的引用(当然引用所指的对象是它的子类)。那么,这种方式和直接在类里写一个方法: public static AuthorizationFactory getInstance(){......},再通过此方法给该类的AuthorizationFactory引用返回具体实例相比有什么区别与优势呢?