享元模式是设计模式中少数几个已提升系统性能为目的模式之一。它的核心思想是:若是系统存在多个
相同的对象,那么只须要共享一分对象的拷贝,而没必要为每一次使用都建立新的对象。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()); } }