Bootstrap

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 {
    @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 框架的设计哲学和实现细节。

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

;