享元模式是設計模式中少數幾個已提升系統性能爲目的模式之一。它的核心思想是:若是系統存在多個
相同的對象,那麼只須要共享一分對象的拷貝,而沒必要爲每一次使用都建立新的對象。java
當有對象被大量複用時,特別是重量級的對象複用可使用享元模式來提升系統性能。其優勢以下:
1.能夠節省重複建立對象的開銷,由於被享元模式維護的相同對象只會被建立一次,當建立對象比
較耗時時,變能夠節省大量時間。
2.因爲建立的對象數減小,系統內存需求也減少了,這對GC的壓力也相應的下降了,進而使系統
有一個健康的內存結構和更快的反應熟讀。數據庫
享元模式共分三部分:享元工廠、業務接口、業務實現,其中享元工廠是其核心,是享元模式的精髓所在。
1.業務接口設計模式
public interface ICloudService{ /** * 獲取server服務 */ Object getCloudStoreServer(); /** * 獲取存儲空間 */ Object getMyStoreInfo(String account); }
2.業務實現服務器
public class CloudServiceImp implements ICloudService{ String serverCode = null; Object server = null; public CloudServiceImp(String serverCode){ this.serverCode = serverCode; /* * 初始化server對象,如連接遠端服務、查詢數據庫、解析xml等動態實例化工做。 */ server = (Object)"Cloud server : 115, 221.43.29.38, ...."; } @Override public Object getCloudStoreServer() { return server; } @Override public Object getMyStoreInfo(String account) { return (Object)account+" space:hourse for me, total 2028M, used 1320M, ...."; } }
3.享元工廠ide
/* * 享元工廠是享元模式的核心,確保系統能夠共享相同的對象。 */ public class CloudServerFactory{ private Map<String,ICloudService> cloudService = new HashMap<String,ICloudService>(); public ICloudService getCloudServer(String serverCode) { ICloudService server = cloudService.get(serverCode); if(server == null) { //經過serverCode共享server服務器服務,避免相同的服務器服務被屢次建立 server = new CloudServiceImp(serverCode); cloudService.put(serverCode,server); } return server; } }
public class FlyWeightTest{ @Test public void flyWeight(){ CloudServerFactory factory = new CloudServerFactory(); ICloudService service = factory.getCloudServer("0014440"); Object serverInfo = service.getCloudStoreServer(); Object mySp = service.getMyStoreInfo("zhangsan"); System.out.println(serverInfo.toString()); System.out.println(mySp.toString()); } }