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 {
@Override
public 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 {
@Override
public void saveUser(User user) {
// 保存用户逻辑
}
}
public class UserServiceProxy implements UserService {
private UserService userService;
public UserServiceProxy(UserService userService) {
this.userService = userService;
}
@Override
public 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 {
@Override
public void execute() {
// JDBC事务逻辑
}
}
public class JtaTransactionStrategy implements TransactionStrategy {
@Override
public void execute() {
// JTA事务逻辑
}
}
观察者模式(Observer Pattern)
- 应用场景:Spring 事件驱动模型。
- 示例:
// 观察者模式示例:事件监听
public class ApplicationEvent {
// 事件内容
}
public interface ApplicationListener {
void onApplicationEvent(ApplicationEvent event);
}
public class CustomEventListener implements ApplicationListener {
@Override
public void onApplicationEvent(ApplicationEvent event) {
// 处理事件
}
}
装饰器模式(Decorator Pattern)
- 应用场景:扩展或修改 Bean 的功能。
- 示例:
// 装饰器模式示例:DAO扩展
public interface UserDao {
void saveUser(User user);
}
public class UserDaoImpl implements UserDao {
@Override
public void saveUser(User user) {
// 保存用户逻辑
}
}
public class LoggingUserDaoDecorator implements UserDao {
private UserDao userDao;
public LoggingUserDaoDecorator(UserDao userDao) {
this.userDao = userDao;
}
@Override
public 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
框架的设计哲学和实现细节。
– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。