享元模式
程序员文章站
2022-05-05 08:27:32
...
享元模式
享元模式,是为数不多的只为提升系统性能而生的设计模式。
复用重量级对象。多个线程子类,有个公共的接口管理类。
与对象池不同的是,对象池中的对象都可以相互替代,而享元实例不可以。
享元模式的一个典型应用实例:
SAAS系统中,假定名称为“工资管理系统”(FMR),甲乙丙3个公司,为FMR的3个用户,而每个公司又拥有100名员工。每个员工都可以登录FMR查询自己的收入情况,并且为了系统安全,每个公司都有自己的独立数据库。在这种情况下,我们便可以使用享元模式,为每个公司提供查询接口,而一个公司下所有员工都可以共享相同的查询实例,这样系统只需要3个享元实例,就可以满足300个员工的查询请求。
享元模式的精髓就是使用享元工厂对每个享元实例进行维护。
a.享元对象创建工厂:
package com.zendly.mode.share; import java.util.Hashtable; import java.util.Map; /** * 享元对象创建工厂 * @author zendly */ public class ReportManagerFactroy { Map<String, IReportManeger> financialReportManager = new Hashtable<String, IReportManeger>(); IReportManeger getFinancialManeger(String tenantId){ IReportManeger r = financialReportManager.get(tenantId); if (null==r) { r = new FinancialReportManager(tenantId); financialReportManager.put(tenantId, r); } return r; } }
b.享元对象的接口:
package com.zendly.mode.share; /** * 享元对象的接口 * @author zendly */ public interface IReportManeger { public String createReport(); }
c.不同业务类型实例:
package com.zendly.mode.share; /** * 不同业务类型实例 * @author zendly */ public class FinancialReportManager implements IReportManeger { protected String tenantId = null;//公司唯一ID public FinancialReportManager(String tenantId) { this.tenantId=tenantId; } @Override public String createReport() { return "This is FinancialReport!"; } }
上一篇: 享元模式
下一篇: 如何创建处理器池之享元模式