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

Spring 设计模式:经典设计模式

Spring 设计模式:经典设计模式

引言

Spring 框架广泛使用了经典设计模式。

这些模式在 Spring 内部发挥着重要作用。

通过理解这些设计模式在 Spring 中的应用,开发者可以更深入地掌握 Spring 框架的设计哲学和实现细节。

经典设计模式

控制反转(IoC)与依赖注入(DI)

  • 应用场景:Spring 的核心机制。
  • 示例
// IoC与DI示例
public class UserService {
private UserRepository userRepository;public UserService(UserRepository userRepository) {this.userRepository = userRepository;}public void saveUser(User user) {userRepository.save(user);}}

工厂模式(Factory Pattern)

  • 应用场景:BeanFactory 和 ApplicationContext。
  • 示例
// 工厂模式示例:BeanFactory
public interface BeanFactory {Object getBean(String name);
}public class ApplicationContext implements BeanFactory {@Overridepublic Object getBean(String name) {// 返回Bean实例return new Object();}
}

单例模式(Singleton Pattern)

  • 应用场景:Spring 容器默认管理 Bean 的方式。
  • 示例
// 单例模式示例:Spring Bean
@Component
public class SingletonBean {// Bean的单例实例
}

代理模式(Proxy Pattern)

  • 应用场景:Spring AOP。
  • 示例
// 代理模式示例:AOP代理
public interface UserService {void saveUser(User user);
}public class UserServiceImpl implements UserService {@Overridepublic void saveUser(User user) {// 保存用户逻辑}
}public class UserServiceProxy implements UserService {private UserService userService;public UserServiceProxy(UserService userService) {this.userService = userService;}@Overridepublic void saveUser(User user) {System.out.println("Before saving user");userService.saveUser(user);System.out.println("After saving user");}}

模板方法模式(Template Method Pattern)

  • 应用场景:JdbcTemplate、JpaTemplate。
  • 示例
// 模板方法模式示例:JdbcTemplate
public abstract class JdbcTemplate {public void executeQuery(String sql) {// 模板方法openConnection();runQuery(sql);closeConnection();}protected abstract void runQuery(String sql);private void openConnection() {// 打开连接}private void closeConnection() {// 关闭连接}
}

策略模式(Strategy Pattern)

  • 应用场景:Spring 事务管理。
  • 示例
// 策略模式示例:事务管理
public interface TransactionStrategy {void execute();
}public class JdbcTransactionStrategy implements TransactionStrategy {@Overridepublic void execute() {// JDBC事务逻辑}
}public class JtaTransactionStrategy implements TransactionStrategy {@Overridepublic void execute() {// JTA事务逻辑}
}

观察者模式(Observer Pattern)

  • 应用场景:Spring 事件驱动模型。
  • 示例
// 观察者模式示例:事件监听
public class ApplicationEvent {// 事件内容
}public interface ApplicationListener {void onApplicationEvent(ApplicationEvent event);
}public class CustomEventListener implements ApplicationListener {@Overridepublic void onApplicationEvent(ApplicationEvent event) {// 处理事件}
}

装饰器模式(Decorator Pattern)

  • 应用场景:扩展或修改 Bean 的功能。
  • 示例
// 装饰器模式示例:DAO扩展
public interface UserDao {void saveUser(User user);
}public class UserDaoImpl implements UserDao {@Overridepublic void saveUser(User user) {// 保存用户逻辑}
}public class LoggingUserDaoDecorator implements UserDao {private UserDao userDao;public LoggingUserDaoDecorator(UserDao userDao) {this.userDao = userDao;}@Overridepublic void saveUser(User user) {System.out.println("Before saving user");userDao.saveUser(user);System.out.println("After saving user");}
}

门面模式(Facade Pattern)

  • 应用场景:Spring 的 ApplicationContext。
  • 示例
// 门面模式示例:ApplicationContext
public class ApplicationContext {public Object getBean(String name) {// 返回Bean实例return new Object();}
}

结论

Spring框架通过综合运用多种经典设计模式,实现了灵活性、扩展性和可维护性,满足了现代企业级应用开发的多样需求。

开发者应深入理解这些设计模式在 Spring 中的应用,以更好地掌握 Spring 框架的设计哲学和实现细节。

– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。

http://www.lryc.cn/news/517314.html

相关文章:

  • OneFlow和PyTorch在性能上有哪些区别?
  • win下搭建elk并集成springboot
  • H7-TOOL固件2.27发布,新增加40多款芯片脱机烧录,含多款车轨芯片,发布LUA API手册,CAN助手增加负载率,错误状态信息检测
  • STM32+WIFI获取网络时间+8位数码管显示+0.96OLED显
  • 以太网ICMP协议(ping指令)——FPGA学习笔记25
  • 从零手写线性回归模型:PyTorch 实现深度学习入门教程
  • 【Cesium】自定义材质,添加带有方向的滚动路线
  • C 语言奇幻之旅 - 第11篇:C 语言动态内存管理
  • IDEA 撤销 merge 操作(详解)
  • swarm天气智能体调用流程
  • LED背光驱动芯片RT9293应用电路
  • 二叉树的二叉链表和三叉链表
  • 【学习路线】Python 算法(人工智能)详细知识点学习路径(附学习资源)
  • C++直接内存管理new和delete
  • Linux 内核中网络接口的创建与管理
  • 人工智能 前馈神经网络练习题
  • Windows搭建RTMP服务器
  • Vue重新加载子组件
  • 【VScode】设置代理,通过代理连接服务器
  • js es6 reduce函数, 通过规格生成sku
  • 基于R语言的DICE模型
  • 【C】PAT 1006-1010
  • 力扣双指针-算法模版总结
  • 解释一下:运放的输入偏置电流
  • Windows 11 上通过 WSL (Windows Subsystem for Linux) 安装 MySQL 8
  • 信用租赁系统助力企业实现免押金租赁新模式
  • OSPF特殊区域(open shortest path first LSA Type7)
  • Element-plus表单总结
  • unity学习13:gameobject的组件component以及tag, layer 归类
  • 51单片机——中断(重点)