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引用返回具體例項相比有什麼區別與優勢呢?
...... private static String className = "com.jivesoftware.forum.database.DbAuthorizationFactory"; private static void loadAuthorizationFactory() { if (factory == null) { //Use className as a convenient object to get a lock on. synchronized(className) { if (factory == null) { //See if the classname has been set as a Jive property. String classNameProp = JiveGlobals.getJiveProperty( "AuthorizationFactory.className"); if (classNameProp != null) { className = classNameProp; } try { Class c = Class.forName(className); factory = (AuthorizationFactory)c.newInstance(); } catch (Exception e) { System.err.println("Exception loading class: " + e); e.printStackTrace(); } } } } } ...... <p class="indent"> |
將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引用返回具體例項相比有什麼區別與優勢呢?
相關文章
- 請教Jive程式碼中的問題
- jive中這段程式碼什麼意思?
- Java中,類與類,類中的程式碼執行順序Java
- 請教jive的一處程式碼
- jive原始碼原始碼
- Jive筆記1--關於Jive1中的驗證和相關類的呼叫 (轉)筆記
- 如何更好、更快的解讀jive的程式碼
- 關於JIVE原始碼!原始碼
- 分類任務中效能度量及程式碼
- Jive 中的設計模式設計模式
- Jive原始碼的疑問原始碼
- java中的成員內部類,程式碼截圖Java
- 用EA將生成原來程式碼中的類圖
- jive中的緩衝技術
- Jive 中的設計模式 (轉)設計模式
- Jive原始碼下載問題原始碼
- jive對密碼的加解密?密碼解密
- Jive筆記2----關於Jive2中的中文搜尋 (轉)筆記
- 深度學習 | 分類任務中類別不均衡解決策略(附程式碼)深度學習
- 代理類測試程式碼
- bert分類的程式碼
- Jive中的設計模式問題設計模式
- Jive中的分頁處理 (轉)
- 使用Java8中的Optional類來消除程式碼中的null檢查JavaNull
- Collections工具類,可以使用collections工具類對程式碼中的list進行分組
- weblogic中釋出jive的問題Web
- 請教在eclispe中如何配置使用jiveLisp
- jive(jdon版)好像沒法修改密碼密碼
- 關於jive的password密碼問題!密碼
- MD5程式碼工具類
- 23. 人物基類程式碼
- 在JBuilder7中除錯Jive中的JspUI除錯JS
- 求救!Jive的工程檔案在JB7/9中亂碼的問題
- 程式設計師垃圾程式碼分類指南程式設計師
- 關於jive中ForumFactory.getInstance()的困惑
- jive中MySQL中文問題解決一法MySql
- Jive工程在JB8中的編譯編譯
- 請教:Jive中的moderate是什麼意思?