一、簡介
享元模式是設計模式中少數幾個已提高系統性能爲目的模式之一。它的核心思想是:如果系統存在多個相同的對象,那麼只需要共享一分對象的拷貝,而不必爲每一次使用都創建新的對象。
二、使用場景及優點
當有對象被大量複用時,特別是重量級的對象複用可以使用享元模式來提高系統性能。其優點如下: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.享元工廠/*
* 享元工廠是享元模式的核心,確保系統可以共享相同的對象。
*/
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());
}
}