享元模式()
享元模式是設計模式中少數幾個以提高系統性能為目的的模式之一它的核心思想是如果在一個系統中存在多個相同的對象那麼只需共享一份對象的拷貝而不必為每一次使用都創建新的對象在享元模式中由於需要構造和維護這些可以共享的對象因此常常會出現一個工廠類用於維護和創建對象
享元模式對性能提升的主要幫助有兩點
()可以節省重復創建對象的開銷因為被享元模式維護的相同對象只會被創建一次當創建對象比較耗時時便可以節省大量時間
()由於創建對象的數量減少所以對系統內存的需求也減小這將使得GC的壓力也相應地降低進而使得系統擁有一個更健康的內存結構和更快的反應速度
享元模式的主要角色由享元工廠抽象享元具體享元類和主函數幾部分組成它們的功能如表所示
表 享元模式角色
基於以上角色享元模式的結構如圖所示
圖 享元模式類圖
享元工廠是享元模式的核心它需要確保系統可以共享相同的對象一般情況下享元工廠會維護一個對象列表當任何組件嘗試獲取享元類時如果請求的享元類已經被創建則直接返回已有的享元類若沒有則創建一個新的享元對象並將它加入到維護隊列中
注意享元模式是為數不多的只為提升系統性能而生的設計模式它的主要作用就是復用大對象(重量級對象)以節省內存空間和對象創建時間
享元模式的一個典型應用是在SAAS系統中SAAS即Software As A Service是目前比較流行的一種軟件應用模式
以一個人事管理系統的SAAS軟件為例假設公司甲乙丙均為這個SAAS系統的用戶則定義每個公司為這套系統的一個租戶每個公司(租戶)又各有個員工如果這些公司的所有員工都可以登錄這套系統查看自己的收入情況並且為了系統安全每個公司(租戶)都擁有自己獨立的數據庫為了使系統的設計最為合理在這種情況下便可以使用享元模式為每個租戶分別提供工資查詢的接口而一個公司(租戶)下的所有員工可以共享一個查詢(因為一個租戶下所有的員工數據都存放在一個數據庫中它們共享數據庫連接)這樣系統只需要個享元實例就足以應付個員工的查詢請求了系統的結構如圖所示
圖 享元模式的示例
返回目錄Java程序性能優化讓你的Java程序更快更穩定
編輯推薦
Java程序設計培訓視頻教程
JEE高級框架實戰培訓視頻教程
JME移動開發實戰教學視頻
Visual C++音頻/視頻技術開發與實戰
Oracle索引技術
ORACLEG數據庫開發優化指南
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27827.html