Java常用设计模式是基于封装、继承、多态等基础语法解决实际问题的实践工具:单例用private构造+static保证唯一性;工厂用接口+多态解耦创建逻辑;建造者用链式调用简化复杂对象构建;代理用接口+反射实现在不修改原逻辑前提下增强行为。

Java常用设计模式不是脱离语法的抽象理论,而是扎根于基础语法之上的实践工具。它们用封装、继承、多态、接口、静态成员、内部类等基本语法元素,解决真实开发中的重复问题。掌握它们的关键,在于理解“为什么这里要用这个语法特性来实现该模式”。
单例模式:用static和private构造器控制实例唯一性
单例依赖Java最基础的访问控制与类加载机制。核心是私有构造器阻止外部new,静态字段或静态内部类保证全局唯一实例。
- 饿汉式:利用static final字段在类加载时初始化,天然线程安全,但不支持延迟加载
- 静态内部类式:利用JVM类加载的原子性与懒加载特性,推荐用于大多数业务场景
- 双重检查锁(DCL):需配合volatile防止指令重排,适用于必须延迟加载且高并发的场景
典型落地点:Spring中默认scope为singleton的Bean、Log4j的LoggerFactory、Runtime.getRuntime()、HikariCP连接池管理器。
工厂模式:用接口+多态解耦对象创建与使用
工厂本质是把if-else或switch-case的对象创建逻辑,封装进方法或子类中。它重度依赖接口定义契约、实现类提供具体行为、运行时多态动态绑定。
立即学习“Java免费学习笔记(深入)”;
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 简单工厂:一个静态方法根据参数返回不同实现,适合逻辑简单、变化少的场景(如ShapeFactory)
- 工厂方法:定义抽象工厂接口,由子类决定实例化哪个产品,便于扩展新类型(如JDBC的DriverManager)
- 抽象工厂:创建产品族,适用于多个维度组合变化(如不同操作系统的UI组件生成)
典型落地点:Calendar.getInstance()、MyBatis的SqlSessionFactory、Spring的BeanFactory。
建造者模式:用链式调用简化复杂对象构造
当一个对象有多个可选参数,且构造过程需要分步、可读性强时,建造者通过内部Builder类+方法返回this,将new + set的冗长过程变成流畅API。
- Builder类通常为静态内部类,复用外部类作用域
- 每个set方法返回Builder自身,实现链式调用(如StringBuilder.append())
- Lombok的@Builder注解自动生成,大幅减少模板代码
典型落地点:Spring Security的UserDetailsBuilder、HTTP客户端Request对象构建、DTO/VO组装。
代理模式:用接口+反射+动态代理增强对象行为
代理不改变原逻辑,而是在调用前后插入横切逻辑。Java基础语法中,JDK动态代理依赖接口+InvocationHandler,CGLIB代理依赖继承+字节码增强。
- 目标对象必须实现接口(JDK代理前提)
- InvocationHandler中通过反射执行真实方法,再添加日志、事务、权限等逻辑
- Spring AOP底层正是基于此,把@Transactional等注解编译为代理逻辑
典型落地点:Spring AOP、RPC远程调用客户端、API网关鉴权拦截、缓存自动装配。

















