享元模式Flyweight
2018-08-23 本文已影响0人
ybyao
概念
核心思想:系统中存在多个相同的对象,那么就共享一份对象的拷贝,不必为每一次使用都创建新的对象,需要一个工厂类来维护和创建对象
作用
1.节省重复创建对象的开销
2.创建对象的数量减少,对系统内存的需求也减小了
组成图
享元模式.png举例
eg. 以人事管理系统的SAAS软件系统为例,假设公司甲、乙、丙均为SAAS系统的用户,则定义每个公司为这套系统中的一个租户。每个公司(租户)又各自有100个员工,如果这些公司的所有员工都可以登录这套系统查看自己的收入情况,为了系统安全,每个公司(租户)都拥有自己独立的数据库。这种情况下就需要使用享元模式为每个租户分别提供一个工资查询接口,而每个公司(租户)下的所有员工可以共享一个查询
代码
public interface IReportManager {
public String createReport();
}
public class FinancialReportManager implements IReportManager {
private String tenantId = null;
public FinancialReportManager(String tenantId) {
this.tenantId = tenantId;
}
@Override
public String createReport() {
// TODO Auto-generated method stub
return "This is a financial report--------"+tenantId;
}
}
public class ReportManagerFactory {
HashMap<String, IReportManager> reportManagerMap = new HashMap<>();
public IReportManager getReportManager(String keyId){
IReportManager reportManager = reportManagerMap.get(keyId);
if(reportManager == null){
reportManager = new FinancialReportManager(keyId);
reportManagerMap.put(keyId, reportManager);
}
return reportManager;
}
public static void main(String[] args) {
ReportManagerFactory rmf = new ReportManagerFactory();
IReportManager rm = rmf.getReportManager("a");
System.out.println(rm.createReport());
}
}