定义
享元模式:如果在一个系统中存在多个对象,那么只需要一份对象拷贝,而不必为每一次使用都创建新的对象。
优点
- 可以节省创建对象的开销;
- 减少对系统内存的需求降低GC压力
结构
角色 | 作用 |
---|---|
享元工厂 | 创建具体享元类,维护相同的享元对象,保证相同的享元对象被系统共享 |
抽象享元 | 定义需要共享的对象的业务接口 |
具体享元类 | 实现抽象享元的接口,完成业务逻辑 |
Main | 使用享元模式的客户端 |
类图
应用
假设有一个管理系统,系统有3个公司,分别为甲乙丙,各公司各有100人,员工可登录系统查看工资。因为系统安全,每个公司都有自己独立的数据库,这种情况下,可以使用享元模式为每个公司分别提供工资查询接口,而一个公司下所有员工共享一个查询。
代码
public interface IReportManager {
String createReport();
}
public class FinancialReportManager implements IReportManager {
protected String tenantId;
public FinancialReportManager(String tenantId) {
this.tenantId = tenantId;
}
@Override
public String createReport() {
return "this is a financial report";
}
}
public class EmployeeReportManager implements IReportManager {
protected String tenantId;
public EmployeeReportManager(String tenantId) {
this.tenantId = tenantId;
}
@Override
public String createReport() {
return "this is a employee report";
}
}
public class Main {
public static void main(String[] args) {
ReportManagerFactory factory = new ReportManagerFactory();
IReportManager a = factory.getFinancialReportManager("a");
System.out.println(a.createReport());
}
}