当前位置: 首页 > news >正文

Java项目中最常用的6个设计模式

在 Java 项目开发中,以下 6 种设计模式因实用性强、应用场景广泛而被高频使用:

1. 单例模式(Singleton Pattern)

用途:确保一个类仅有一个实例,并提供全局访问点。场景:线程池、数据库连接池、配置类、日志工具等需要全局唯一实例的场景。实现方式:饿汉式、懒汉式(双重检查锁)、静态内部类、枚举(推荐,天然防止反射和序列化破坏)。
java
 
运行
// 枚举单例(最佳实践)
public enum Singleton {INSTANCE;public void doSomething() { ... }
}
 

2. 工厂模式(Factory Pattern)

分类:简单工厂、工厂方法、抽象工厂。用途:封装对象创建逻辑,解耦对象实例化与使用。场景:对象创建复杂(如参数多、依赖多)、需要灵活切换产品类型时(如数据库驱动切换、日志框架适配)。
java
 
运行
// 工厂方法示例
public interface LoggerFactory {Logger createLogger();
}public class FileLoggerFactory implements LoggerFactory {@Overridepublic Logger createLogger() { return new FileLogger(); }
}
 

3. 观察者模式(Observer Pattern)

用途:定义对象间一对多依赖,当一个对象状态变化时,所有依赖者自动收到通知。场景:事件监听(如 GUI 按钮点击)、消息订阅、Spring 的事件机制(ApplicationEvent)、RxJava 响应式编程。
java
 
运行
// JDK自带观察者接口
public class Subject extends Observable {public void changeState() {setChanged();notifyObservers(); // 通知观察者}
}public class ObserverImpl implements Observer {@Overridepublic void update(Observable o, Object arg) { ... }
}
 

4. 装饰器模式(Decorator Pattern)

用途:动态给对象添加功能,避免继承带来的类爆炸。场景:IO 流(BufferedReader装饰FileReader)、Spring 的TransactionProxy、MyBatis 的缓存装饰器。
java
 
运行
// IO中的装饰器示例
Reader reader = new BufferedReader(new FileReader("file.txt"));
 

5. 适配器模式(Adapter Pattern)

用途:将一个类的接口转换成客户端期望的另一个接口,解决接口不兼容问题。场景:集成第三方组件(接口不匹配)、旧系统改造(适配新接口)、SpringMVC 的HandlerAdapter
java
 
运行
// 类适配器示例
public interface Target { void request(); }
public class Adaptee { public void specificRequest() { ... } }
public class Adapter extends Adaptee implements Target {@Overridepublic void request() { specificRequest(); }
}
 

6. 代理模式(Proxy Pattern)

分类:静态代理、动态代理(JDK 动态代理、CGLIB)。用途:控制对象访问,增强功能(如日志、事务、权限)。场景:Spring AOP(基于动态代理)、MyBatis 的 Mapper 代理、RPC 框架的远程代理。
java
 
运行
// JDK动态代理示例
public class ProxyHandler implements InvocationHandler {private Object target;@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 增强逻辑(如日志)return method.invoke(target, args);}
}
 

总结

这些模式覆盖了对象创建、行为扩展、接口适配、依赖管理等核心场景,是 Java 开发中解决常见问题的 “利器”。实际项目中,Spring、MyBatis 等框架也大量运用了这些模式,掌握它们能显著提升代码的可维护性和扩展性。
http://www.zskr.cn/news/66439.html

相关文章:

  • IDEA中使用http协议
  • C语言结构体全面解析与内存优化 - 实践
  • ESP32C3开发指南(基于IDF):console控制台命令行交互功能 - 教程
  • vue+devtools下载地址
  • Google Benchmark:高性能C++代码基准测试框架
  • 2025年11月景区饮品供应商推荐:避坑要点与行业权威评测报告
  • 2025年11月景区饮品供应商推荐榜单:一份基于市场数据客观选择指南
  • 基于深度学习的PCB缺陷检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 成膜助剂贸易公司TOP10优选,出口厂商与资质供应商清单权威推荐
  • 过碳酸钠哪家质量好?过碳酸钠供应商TOP10名单优选:销量领先欧盟标准供应商
  • 成膜助剂外贸公司推荐——出口厂商及资质供应商指南:实力解析
  • 过碳酸钠源头厂家有哪些?过碳酸钠源头厂家、供应商、生产厂家推荐:环保型可吨批!
  • 成膜助剂厂家权威推荐:成膜助剂出口厂商名录——有资质供应商与贸易公司
  • 详细介绍:线程安全单例模式与懒汉线程池的实现与优化
  • 真术相成:成都 AI 培训领域的权威机构,凭什么成为政企合作首选?
  • 《程序员修炼之道:从小工到专家》前五分之四观后感
  • NOIP 2025
  • 过碳酸钠厂家哪家好?2025 高含氧量优质厂商推荐:过碳酸钠厂家十大名单权威指南
  • 征程 6 | linear 高精度输出配置方式
  • 深入解析:kafka 2.X+zookeeper3.X 权限控制
  • P4391 无线传输
  • 查看虚拟环境里安装了哪些包
  • 2025/11/28
  • 2025/11/30
  • 《代码大全2》读书笔记5
  • 读书笔记5
  • [豪の算法奇妙冒险] 代码随想录算法训练营第九天 | 151-翻转字符串里的单词、Carl55-右旋转字符串、28-实现strStr()、459-重复的子字符串
  • JMeter查询快递(以快递100为例)
  • AI元人文构想:回应《自动驾驶技术的伦理认同与社会化应用治理》——规则库的范式分野与价值原语化的理论必然
  • 20232315 2025-2026-1 《网络与系统攻防技术》实验七实验报告