Skip to content
  • AOP 面向切面编程

    AOP 是一种独立的编程范式,和 OOP(面向对象)并列,Spring AOP 只是它的一种实现(AspectJ 也是)。@Transactional 事务、日志、权限校验背后都是它。但"切面、切点、通知"这些词一直有点绕,这篇把 AOP 从头理清:它解决什么、核心概念是什么、底层怎么用动态代理实现。

    一、解决什么问题:横切关注点散落各处

    看一段没有 AOP 的代码:

    java
    public void saveOrder(Order order) {
        log.info("开始保存订单");          // 日志
  • IoC 控制反转与依赖注入

    IoC 和 DI 是众多框架的通用设计思想——Spring、Google Guice、Java CDI、.NET Core 都用它,只是 Spring 应用得最广。平时天天用 @Autowired@Bean,但"控制反转"到底反转了什么、IoC 和 DI 是不是一回事、三种注入方式怎么选——这些基础概念值得系统梳理一遍。这篇把 IoC 从头讲清楚,是理解《AOP 面向切面编程》和《[Spring Boot 自动配置原理](/framework/springbo

  • 适配器模式

    适配器模式是结构型模式里最常用、也最容易理解的一个,平时对接第三方接口、统一日志框架时一直在用。这篇把它的三种变体(类适配器、对象适配器、接口适配器)理清楚,以及它和装饰器、代理这两个"长得像"的兄弟怎么区分。

    一、解决什么问题

    适配器模式解决的是**"两个接口不兼容,但要一起工作"**的问题。

    最直观的类比是电源适配器:墙上是 220V 的插座,手机要的是 5V 直流电,插不进去——中间加个充电头(适配器),把 220V 转成 5V,两边就对上了。

    代码里同样常见:

    • 对接第三方:对方的接口是 `queryData(
  • 建造者模式

    建造者模式解决的是"构造一个参数又多、又有可选参数的复杂对象"的痛点,Lombok 的 @BuilderStringBuilder、OkHttp 的 Request.Builder 都是它。这篇把它讲清楚:它和工厂模式的区别在哪、链式调用怎么来的。

    一、解决什么问题

    当一个对象的构造参数很多、又有可选参数时,传统的构造函数会变得很难用:

    java
    // 痛点:参数多、顺序难记、可选参数要用 null 占位
    Computer c = new Computer("i7", "16G", "512G", null, null,
  • 责任链模式

    责任链模式在框架里几乎无处不在——Spring 的拦截器链、Servlet 的 Filter 链、网关的过滤器链,都是它。这篇把它的核心思想理清:一个请求怎么在"一串处理者"之间传递、谁处理谁停,以及它和 if/else、观察者模式的区别。

    一、解决什么问题

    责任链模式解决的是**"一个请求要经过多个处理者,但不确定哪个能处理"**的问题。

    最典型的场景是审批流程

    java
    // 用 if/else 写审批:层级越多越乱,而且判断逻辑和业务逻辑耦合
    if (days <= 1) {
        // 组长审批
    } else i
  • 装饰器模式

    装饰器模式是"组合优于继承"的最佳示范,Java 的 IO 流、Spring 里到处是它的影子。这篇把它讲清楚:为什么不用继承、装饰器怎么"层层包装"、以及它和代理模式这对"孪生兄弟"到底差在哪。

    一、解决什么问题

    装饰器模式解决的是**"给对象动态加功能,又不改原类、不搞继承爆炸"**的问题。

    假设你要卖咖啡,有基础咖啡,可以加牛奶、加糖、加奶泡。如果用继承

    Coffee
    ├─ MilkCoffee
    ├─ SugarCoffee
    ├─ MilkSugarCoffee      ← 每种组合都要一个子类
    ├─ MilkF
  • 工厂模式

    工厂模式平时在项目里几乎天天碰(Spring 的 @BeanBeanFactory 本质就是工厂),但"简单工厂、工厂方法、抽象工厂"这三个词到底什么关系、什么时候用哪个,一直没有清晰地串起来。这篇按演进顺序理一遍,每级解决什么问题、又带来什么新问题。

    一、解决什么问题

    工厂模式解决的是 new 的硬编码耦合

    java
    // 写死具体类:想换成微信支付,就得改这行代码
    Pay pay = new Alipay();

    一旦代码里到处 new Alipay(),切换实现、增加渠道、统一初始化逻辑,全都

  • 设计模式

    常见设计模式学习笔记,按 GoF 三大类(创建型 / 结构型 / 行为型)组织。点击下面的文章阅读:

    创建型

    • 单例模式——饿汉式/懒汉式/双重检查锁/静态内部类/枚举,多线程安全与反射/序列化破坏的应对
    • 工厂模式——简单工厂/工厂方法/抽象工厂三级演进,Spring 的 BeanFactory 与 @Bean 就是它的落地
    • [建造者模
  • 观察者模式

    观察者模式是事件驱动、消息通知的底层思想,也是最早接触的设计模式之一。之前写过一篇《设计模式:观察者模式和发布订阅模式的区别?》讲二者的差异,这篇把观察者模式本身系统地补全:它解决什么、怎么实现、和发布订阅到底差在哪。

    一、解决什么问题

    观察者模式解决的是**"一对多"的状态同步问题**:一个对象的状态变了,需要自动通知依赖它的多个对象。

    典型场景:

    • 电商下单:下单成功后,要通知库存系统扣库存、通