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

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

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


http://www.kler.cn/a/472114.html

相关文章:

  • 聊天机器人Rasa面试内容整理-如何选择合适的分词器和分类器?
  • 博奥龙Nanoantibody系列IP专用抗体
  • element-ui 实现输入框下拉树组件功能
  • 【文本分类】bert二分类
  • Go语言的 的多态性(Polymorphism)核心知识
  • 【Golang 面试题】每日 3 题(二十三)
  • Python----Python基础(列表 list,切片,多维列表,相关函数,排序,元素的增加,元素的删除,元素的修改,元素的查找,列表的拷贝)
  • 【Oceanbase数据库常用巡检SQL】
  • 【Docker项目实战】使用Docker部署gallery轻量级图片管理系统
  • SSH 暴力破解攻击的诊断与防御
  • Vue进阶(贰幺叁)node 版本切换
  • 正大策略:如何在多变的市场中找到稳定增长之道
  • 学生信息管理系统的数据库设计MySQL
  • java并发之AQS
  • Ruby语言的学习路线
  • 微软:GPT-4o-mini只有8B,o1-mini仅100B
  • Synthesia技术浅析(五):计算机视觉
  • 【人工智能-概念篇】迁移学习、多任务学习与多模态学习:深度解析与应用探讨
  • 无人机航测(航空摄影测量)技术详解
  • 数据库高安全—角色权限:权限管理权限检查