设计模式-享元模式

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

    }
}

 

posted @ 2021-04-13 16:05  JAVA劝退师-H  阅读(46)  评论(0编辑  收藏  举报