设计模式-享元模式
享元模式(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)); } }