zoukankan      html  css  js  c++  java
  • 设计模式-享元模式

      享元模式(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));
    
        }
    }
  • 相关阅读:
    Spring AOP两种实现方式
    重温SQL——行转列,列转行
    SpringMVC-Spring-Hibernate项目搭建之一-- 搭建maven 项目 & servlet的demo
    Linnx 服务器中mysql 无法正常访问问题
    SpringMVC-Spring-Hibernate项目搭建之三-- freemarker & 静态资源整合
    one2many &&many2many
    SQL学习
    使用Maven导出项目依赖的jar包
    Java Hash Collision之数据生产
    HashMap出现Hash DOS攻击的问题
  • 原文地址:https://www.cnblogs.com/woodpecker-z/p/14653719.html
Copyright © 2011-2022 走看看