Java案例有哪些经典的设计模式?

wen java案例 3

本文目录导读:

Java案例有哪些经典的设计模式?

  1. 创建型模式(关注对象创建机制)
  2. 结构型模式(关注类/对象的组合)
  3. 行为型模式(关注对象间通信与职责分配)
  4. Java开发中额外高频使用的模式
  5. 如何快速判断一个模式?

Java经典设计模式通常分为创建型结构型行为型三大类,共23种(GoF模式),在实际的Java开发(尤其是Spring、JDK、Java EE)中,以下几种最常见且最具代表性


创建型模式(关注对象创建机制)

单例模式(Singleton)

  • 场景:保证一个类仅有一个实例,提供全局访问点。
  • Java经典实现Runtime.getRuntime()、Spring默认的Bean作用域(singleton)。
  • 核心代码:私有构造器 + 静态方法返回唯一实例(推荐使用枚举或双重校验锁)。

工厂方法模式 & 抽象工厂模式

  • 场景:将对象创建逻辑封装,实现“开闭原则”。
  • Java经典案例
    • java.util.Collection接口的iterator()方法(工厂方法)。
    • Spring的BeanFactory(工厂模式)。
    • 数据库连接池(如HikariCP创建Connection对象)。

建造者模式(Builder)

  • 场景:构建复杂对象,分离构造与表示。
  • Java经典案例
    • StringBuilder / StringBuffer
    • Lombok的@Builder注解。
    • 不可变对象(如java.util.ImmutableList)。

原型模式(Prototype)

  • 场景:通过克隆创建对象,避免重复初始化。
  • Java经典案例Object.clone()(需实现Cloneable接口),例如ArrayList的浅拷贝。

结构型模式(关注类/对象的组合)

适配器模式(Adapter)

  • 场景:使不兼容的接口协同工作。
  • Java经典案例
    • java.io.InputStreamReader(将InputStream适配为Reader)。
    • Spring AOP的AdvisorAdapter
    • Arrays.asList()(将数组转换为List适配器)。

代理模式(Proxy)

  • 场景:控制对对象的访问,例如延迟加载、权限控制。
  • Java经典案例
    • 静态代理:ThreadRunnable
    • 动态代理:JDK动态代理(java.lang.reflect.Proxy)和CGLIB(Spring AOP默认)。

装饰器模式(Decorator)

  • 场景:动态添加行为,比继承更灵活。
  • Java经典案例
    • java.io.BufferedInputStream装饰FileInputStream
    • javax.servlet.http.HttpServletRequestWrapper

外观模式(Facade)

  • 场景:为复杂子系统提供统一入口。
  • Java经典案例java.net.URL(封装网络通信细节)。

行为型模式(关注对象间通信与职责分配)

观察者模式(Observer)

  • 场景:一对多依赖,状态变化自动通知。
  • Java经典案例
    • java.util.Observer / Observable(JDK 9之前)。
    • Spring事件机制:ApplicationListener + ApplicationEvent
    • 消息队列(如Kafka发布/订阅)。

策略模式(Strategy)

  • 场景:算法可互换,封装变化点。
  • Java经典案例
    • java.util.Comparator接口(排序策略不同)。
    • Spring的Resource接口(文件/HTTP等访问策略)。
    • 电商折扣计算(普通价、会员价、促销价)。

模板方法模式(Template Method)

  • 场景:固定骨架+子类实现具体步骤。
  • Java经典案例
    • AbstractListaddAll()(内部调用子类实现的add())。
    • Spring的JdbcTemplate(执行SQL固定流程,回调处理结果)。
    • Servlet的doGet()/doPost()

责任链模式(Chain of Responsibility)

  • 场景:请求沿链传递直到被处理。
  • Java经典案例
    • javax.servlet.Filter(filter链)。
    • Spring Security的SecurityFilterChain
    • Java日志框架(Logger按级别向上传播)。

迭代器模式(Iterator)

  • 场景:统一集合遍历方式。
  • Java经典案例java.util.Iterator(所有Collection的实现)。

Java开发中额外高频使用的模式

模式 典型应用场景 代表案例
享元模式 连接池、字符串常量池、线程池 String.intern()Integer.valueOf()缓存
命令模式 撤回/重做、线程池任务 Runnable(将“操作”封装为对象)
状态模式 有限状态机(订单状态、网络状态) 电商订单(待支付/已支付/已发货)
解释器模式 正则表达式、SPEL表达式 java.util.regex.Pattern

如何快速判断一个模式?

  1. “工厂”:凡是名称带有FactoryBuilderProvider的,大概率是创建型模式。
  2. “包装”InputStreamBufferedWrapper,常是装饰器或适配器。
  3. “回调”ListenerHandlerCallback,常是观察者或模板方法。
  4. “可插拔”StrategyPolicy,常是策略模式。

在Java面试或实际开发中,单例、工厂、代理、观察者、策略、模板方法是最常被问及、也最实用的六个模式,理解它们与Spring、JDK框架的结合点,会让你对Java设计有更深刻的认识。

抱歉,评论功能暂时关闭!