享元模式:内部状态共享、外部状态外置,以及它和对象池到底差在哪
享元模式(Flyweight)把状态拆成内部状态(共享、不可变)与外部状态(客户端持有、调用传入),让大量细粒度对象只保留少量实例:100 万个字符只需几十个对象。本文用可运行 Java 示例讲透判断方法、工厂池与线程安全,拆解 Integer 缓存和 String 常量池,并分清享元、对象池、单例与缓存。
May all the beauty be blessed
享元模式(Flyweight)把状态拆成内部状态(共享、不可变)与外部状态(客户端持有、调用传入),让大量细粒度对象只保留少量实例:100 万个字符只需几十个对象。本文用可运行 Java 示例讲透判断方法、工厂池与线程安全,拆解 Integer 缓存和 String 常量池,并分清享元、对象池、单例与缓存。
组合模式(Composite)用树形结构表示「部分-整体」,让客户端对叶子与容器使用同一套接口:部门人数、菜单渲染、文件大小统计都靠递归完成。
外观模式(Facade)为子系统提供一致的简化界面:下单要穿过库存、优惠券、支付、通知四个子系统,调用方只写一行。本文用可运行的 Java 示例讲透三条边界(不禁止直连、不增加功能、可以很多个),拆解 SLF4J、RequestFacade、JdbcTemplate,并说清外观与适配器、中介者的区别。
桥接模式(Bridge)将抽象与实现分离,让两个维度各自独立变化:3 种消息类型 × 3 种发送渠道,继承要 9 个类,桥接只要 6 个。用可运行的 Java 示例讲透四个角色、正交判断与三条边界,拆解 JDBC 案例,并说清桥接与策略、适配器的区别。
装饰者模式完整解析:四个角色与「既实现又持有」的关键结构、顺序语义、三条边界与常见坑,JDK/框架里的真实装饰者(java.io、Collections、MyBatis),与代理、适配器的区别。
适配器模式完整解析:类适配器与对象适配器的结构差异与选型,默认适配器与双向适配器,JDK/Spring 里的真实适配器(InputStreamReader、HandlerAdapter、SLF4J),与装饰器、外观的区别。
代理模式完整解析:静态代理与 JDK 动态代理、CGLIB 的写法与选型对比,@Transactional 自调用失效的成因与三种修法,代理与装饰器、适配器的区别。
Java 建造者模式两种形态全对比:GoF 经典(Director + 抽象 Builder,同一过程不同表示)与流式 Builder(链式调用 + build() 校验 + 不可变对象);含《Effective Java》4 参数门槛、record/wither 与 Lombok @Builder 的取舍。
Java 原型模式与深拷贝实战:Object.clone()契约与浅拷贝陷阱、final字段冲突、绕过构造器的风险;深拷贝三种做法(重写 clone、序列化中转、拷贝构造器)对比与选型
工厂模式怎么选?用可运行的 Java 代码对比简单工厂、工厂方法、抽象工厂:三种创建型模式的意图、UML 结构、开闭原则代价与真实适用场景,附选型决策图、switch改造为注册表的做法。