Java常见的设计模式

Java常见的设计模式

    • [工厂模式(Factory Pattern)](#工厂模式(Factory Pattern))
    • [单例模式(Singleton Pattern)](#单例模式(Singleton Pattern))
    • [代理模式模式(Proxy Pattern)](#代理模式模式(Proxy Pattern))
    • [适配器模式(Adapter Pattern)](#适配器模式(Adapter Pattern))
    • [观察者模式(Observer Pattern)](#观察者模式(Observer Pattern))
    • [模板方法模式(Template Pattern)](#模板方法模式(Template Pattern))
    • 策略模式

工厂模式(Factory Pattern)

工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,使得应用程序可以更加灵活和可维护。比如在 Spring 中,FactoryBean 就是一个工厂模式的实现,使用它的工厂模式就可以创建出来其他的 Bean 对象。

单例模式(Singleton Pattern)

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供了一个全局访问点。比如在 Spring 中,所有的 Bean 默认是单例的,这意味着每个 Bean 只会被创建一次,并且可以在整个应用程序中共享。

代理模式模式(Proxy Pattern)

代理模式是一种结构型设计模式,它允许开发人员在不修改原有代码的情况下,向应用程序中添加新的功能。比如在 Spring AOP(面向切面编程)就是使用代理模式的实现,它允许开发人员在方法调用前后执行一些自定义的操作,比如日志记录、性能监控等。

适配器模式(Adapter Pattern)

适配器模式是一种结构型设计模式,它允许开发人员将一个类的接口转换成另一个类的接口,以满足客户端的需求。在 Spring 中,适配器模式常用于将不同类型的对象转换成统一的接口,比如将 Servlet API 转换成 Spring MVC 的控制器接口。

观察者模式(Observer Pattern)

行为设计模式,定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。比如事件驱动、消息传递等功能时, Spring 事件驱动模型(Spring Event 事件机制 )使用观察者模式,ApplicationEventPublisher 事件发布者将事件发布给 ApplicationEventMulticaster 事件广播器,该广播器将事件派发给 @EventListener 注解的事件监听者。

模板方法模式(Template Pattern)

行为设计模式,模板方法模式是最常用的设计模式之一,它是指定义一个操作算法的骨架,而将一些步骤的实现延迟到子类中去实现,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。此模式是基于继承的思想实现代码复用的。比如在 MyBatis 中的典型代表 BaseExecutor,在 MyBatis 中 BaseExecutor 实现了大部分SQL 执行的逻辑;Spring 中JdbcTemplate 就是一个模板方法模式的实现,它提供了一种简单的方式来执行 SQL 查询和更新操作。

策略模式

模式策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使得它们可以互相替换。Spring 中的 TaskExecutor,TaskExecutor 提供了很多实现,比如以下这些:

  • SyncTaskExecutor:直接在调用线程中执行任务,没有真正的异步
  • SimpleAsyncTaskExecutor:使用单线程池异步执行任务;
  • ConcurrentTaskExecutor:使用线程池异步执行任务;
  • SimpleTransactionalTaskExecutor:支持事务的 SimpleAsyncTaskExecutor。这样,我们可以根据自己的需求选择不同的实现策略,使用策略模式的好处有以下这些:

1、可以在不修改原代码的基础上选择不同的算法或策略;

2、可减少程序中的条件语句,根据环境改变选择合适的策略;

3、扩展性好,如果有新的策略出现,只需要创建一个新的策略类,无须修改原代码。

相关推荐
AI玫瑰助手几秒前
Python函数:global与nonlocal关键字的使用
开发语言·python·信息可视化
不会C语言的男孩1 分钟前
C++ Primer 第16章:模板与泛型编程
开发语言·c++
这个DBA有点耶3 分钟前
死锁排查进阶:从日志到根因的完整分析链
java·开发语言·数据库·sql·运维开发·学习方法·dba
三无推导3 分钟前
无需扩展的 PHP 加密方案有哪些优势:基于 php.x5.chat 的实践分析
开发语言·php·web开发·数据加密·php加密·php安全·无需扩展
bryant_meng3 分钟前
【Design Patterns】23 Design Patterns: The Ultimate Developer‘s Toolkit
设计模式·编程·计算机科学·设计·工程
jingling5553 分钟前
Flutter | 商城项目鸿蒙(OpenHarmony)适配实战
android·开发语言·前端·flutter·华为·harmonyos
Luminous.4 分钟前
C语言--day25
c语言·开发语言
QT-Neal11 分钟前
C++智能指针使用详解
开发语言·c++
JAVA96512 分钟前
JAVA面试-并发篇 06-ReentrantLock如何实现公平锁的以及可重入吗
java·开发语言·面试
狂人开飞机14 分钟前
18. 中介者模式(Mediator Pattern)
设计模式·c#·中介者模式