java设计模式精讲 Debug 方式+内存分析 第13章 享元模式

13-1 享元模式讲解

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


13-2 享元设计模式coding

现在,有一个场景,公司要求各个部门的管理者做一下年底总结报告,如果这些报告都已经生成过了,那么我们就没有必要再去new一个了;我们通过这么一个场景来体现一下享元模式:
有一个员工接口:

public interface Employee {
    void report();
}

还有一个经理类:

public class Manager implements Employee {

    private String department;
    private String reportContent;

    public Manager(String department) {
        this.department = department;
    }
    /** 我们可以在外部来重置年终报告 */
    public void setReportContent(String reportContent) {
        this.reportContent = reportContent;
    }

    @Override
    public void report() {
        System.out.println(reportContent);
    }
}

还有一个经理工厂类:

public class EmployeeFactory {
    private static final Map<String, Employee> EMPLOYEE_MAP = new HashMap<>();

    public static Employee getManager(String department) {
        Manager manager = (Manager) EMPLOYEE_MAP.get(department);
        if (manager == null) {
            manager = new Manager(department);
            System.out.println("创建部门经理"+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);
        }    
    }
}

执行结果:

创建部门经理QA
创建报告QA部门汇报:此次报告的主要内容是…
创建部门经理RD
创建报告RD部门汇报:此次报告的主要内容是…
创建部门经理PM
创建报告PM部门汇报:此次报告的主要内容是…
创建部门经理BD
创建报告BD部门汇报:此次报告的主要内容是…


效果要和下面的这个差不多:这个就是一个享元模式在这里插入图片描述


这个就是现在的类图:
在这里插入图片描述
我们在使用享元模式的时候,一定要注意线程安全的问题;
我们要理解好内部状态和外部的状态;


13-3 享元模式源码解析(jdk+tomcat)

  1. Integer类里面的valueOf方法;
  2. IntegerCache
  3. tomcat的连接池:GenericObjectPoolConfig
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式是一套被广泛应用于软件开发中的设计思想和模板,它们提供了一种解决常见设计问题的通用解决方案。这些模式帮助开发人员在设计和实现软件时遵循最佳实践,提供了可重用、可扩展和易于维护的代码结构。 Java设计模式可以分为三个主要类别:创建型模式、结构型模式和行为型模式。 首先,创建型模式包含了单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式。这些模式用于创建对象和管理它们的实例化过程,以及确保系统中只存在一个实例或一组相关对象。 其次,结构型模式包含了适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。这些模式关注对象之间的组合和关系,以提供更灵活的结构和功能,并支持系统的扩展和修改。 最后,行为型模式包含了命令模式、中介者模式、观察者模式、迭代器模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式用于管理对象之间的交互和通信,以及定义对象的行为和状态。 不同的设计模式适用于不同的情况和需求。开发人员可以根据自己的需求选择合适的模式,并将其应用于项目中,以提高代码质量、可重用性和可维护性。同时,理解和掌握设计模式也有助于培养良好的设计思维和编程技巧,提高开发人员的工程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值