当前位置: 首页 > 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.jsqmd.com/news/56262/

相关文章:

  • IDEA中使用http协议
  • 记录容器云基于debian镜像的自由组合
  • 详细介绍:Elasticsearch从入门到实践:核心概念到Kibana测试与C++客户端封装
  • ESP32C3开发指南(基于IDF):console控制台命令行交互功能 - 教程
  • OpenCSG x Dell联合发布面向AI原生企业的下一代IT解决方案
  • vue+devtools下载地址
  • 渗透测试中的方法论
  • 德国首个AI科学中心启动研究合作
  • 最全、最清晰、C++的 lower_bound / upper_bound 总结
  • 密码系统设计实验3-2
  • Mysql基础3 - 实践
  • 2025-12-01-Nature 本周最新文献速递
  • 论程序员的管理
  • DevOps设备链对比,Azure 和 TikLab哪款更好用?
  • The country with the largest area in the world
  • 田径赛场飞驰 球类竞技闪耀
  • 绿茵赛场逐梦 热血竞技铸辉煌
  • 一加ACE5 安装类原生系统 crDroid 12
  • 在cline中使用多个OpenAI Compatible
  • 2025年11月景区饮品供应商推荐榜单:一份基于市场数据与用户口碑的权威选择指南
  • 2025年11月景区饮品供应商推荐:避坑要点与行业权威评测报告
  • 域名解析工具nslookup和dig对比
  • 2025年11月景区饮品供应商推荐榜单:一份基于市场数据的客观选择指南
  • 2025年11月景区饮品供应商推荐榜单与市场选择指南
  • 成膜助剂批发商精选,厂家、供货商及制造商汇总:TOP10名单权威推荐
  • 成膜助剂贸易公司TOP10优选,出口厂商与资质供应商清单权威推荐
  • 单片机按键扫描
  • Windows11恢复经典样式右键菜单
  • 过碳酸钠哪家质量好?过碳酸钠供应商TOP10名单优选:销量领先欧盟标准供应商
  • 成膜助剂外贸公司推荐——出口厂商及资质供应商指南:实力解析