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
框架的设计哲学和实现细节。
– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。