国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java設計優化-享元模式

2019-11-14 15:01:10
字體:
來源:轉載
供稿:網友

享元模式是設計模式中少數幾個以調高系統性能為目的的設計模式。它的核心思想是:如果在一個系統中存在多個相同的對象,那么只需共享一份對象的拷貝,而不必為每一次使用都創建新的對象。在享元模式中,由于需要構建和維護這些可以共享的對象,因此,常常會出現一個工廠類,用于維護和創建對象。

享元模式對性能提升的主要幫助有兩點:

1.可以節省重復創建對象的開銷,因為被享元模式維護的相同對象只會被創建一次,當對象創建比較耗時時,便可以節省大量時間;

2.由于創建對象的數量減少,所有對系統內存的需求也減少,這樣使GC的壓力也相應的降低,進而使系統擁有一個更健康的內存結構和更快的反應速度。

享元模式主要有享元工廠、抽象享元、具體享元和主函數幾部分構成。各部分功能如下:

享元工廠是享元模式的核心,它需要確保系統可以共享相同的對象。享元模式的主要作用是復用大對蝦(重量級對象),以減省內存空間和創建時間。享元模式的主要應用是SAAS系統(software as a service)。

抽象享元:

1 public interface IReportManager {2     public String createReport();3 }

具體享元:

 1 public class EmployeeReportManager implements IReportManager { 2      3     PRivate String tenantId = null; 4      5      6      7     public EmployeeReportManager(String tenantId) { 8         this.tenantId = tenantId; 9         System.out.println("EmployeeReportManager.EmployeeReportManager()");10     }11 12 13 14     @Override15     public String createReport() {16         return "This is a employee report";17     }18 19 }
public class FinancialReportManager implements IReportManager{    private String tenantId = null;    public FinancialReportManager(String tenantId) {        this.tenantId = tenantId;        System.out.println("FinancialReportManager.FinancialReportManager()");    }    @Override    public String createReport() {        return "This is a financial report";    }                }

享元工廠:

 1 public class ReportManagerFactory { 2     private Map<String,IReportManager> financialReportManager = new HashMap<String,IReportManager>(); 3     private Map<String,IReportManager> employeeReportManager = new HashMap<String,IReportManager>(); 4      5     public IReportManager getFinancialReportManager(String tenantId){ 6         IReportManager iReportManager = financialReportManager.get(tenantId); 7         if(iReportManager==null){ 8             iReportManager = new FinancialReportManager(tenantId); 9         }10         return iReportManager;11     }12     13     public IReportManager getEmployeeReportManager(String tenantId){14         IReportManager iReportManager = financialReportManager.get(tenantId);15         if(iReportManager==null){16             iReportManager = new FinancialReportManager(tenantId);17         }18         return iReportManager;19     }20     21 }

main方法:

 1 public class TestClient { 2  3     public static void main(String[] args) { 4         ReportManagerFactory rmf = new ReportManagerFactory(); 5         IReportManager rm = rmf.getEmployeeReportManager("1233"); 6         rmf.getEmployeeReportManager("1233"); 7         System.out.println(rm.createReport()); 8     } 9 10 }

另外,享元模式與對象池最大的區別就是,享元模式是不可相互替代的,他們各自有各種的含義和用途,而對象池中的對象是等價的,可以相互替換,如數據庫連接池中的數據庫連接。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 明水县| 高安市| 合阳县| 仙居县| 靖安县| 普定县| 海口市| 桃江县| 桂东县| 阿瓦提县| 探索| 扎囊县| 齐齐哈尔市| 曲靖市| 张家港市| 安塞县| 山阴县| 淅川县| 白银市| 项城市| 昭通市| 沙雅县| 龙井市| 锦州市| 平果县| 阜新市| 中宁县| 福贡县| 湖南省| 额尔古纳市| 西华县| 称多县| 博爱县| 交城县| 南澳县| 白河县| 思南县| 遂平县| 娱乐| 宁明县| 丰城市|