享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。
这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。
由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的 Circle 对象。
主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,
如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。
JAVA应用:
java.lang.Integer
org.apache.commons.pool2.impl.GenericKeyedObjectPool
public interface Employee {
void report();
}
public class Manager implements Employee {
@Override
public void report() {
System.out.println(reportContent);
}
private String title = "部门经理";
private String department;
private String reportContent;
public void setReportContent(String reportContent) {
this.reportContent = reportContent;
}
public Manager(String department) {
this.department = department;
}
}
public class EmployeeFactory {
private static final Map<String,Employee> EMPLOYEE_MAP = new HashMap<String,Employee>();
public static Employee getManager(String department){
Manager manager = (Manager) EMPLOYEE_MAP.get(department);
if(manager == null){
manager = new Manager(department);
System.out.print("创建部门经理:"+department);
String reportContent = department+"部门汇报:此次报告的主要内容是......";
manager.setReportContent(reportContent);
System.out.println(" 创建报告:"+reportContent);
EMPLOYEE_MAP.put(department,manager);
}
return manager;
}
}
public class Test {
private static final String departments[] = {"RD","QA","PM","BD"};
public static void main(String[] args) {
// for(int i=0; i<10; i++){
// String department = departments[(int)(Math.random() * departments.length)];
// Manager manager = (Manager) EmployeeFactory.getManager(department);
// manager.report();
//
// }
Integer a = Integer.valueOf(100);
Integer b = 100;
Integer c = Integer.valueOf(1000);
Integer d = 1000;
System.out.println("a==b:"+(a==b));
System.out.println("c==d:"+(c==d));
}
}