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、扩展性好,如果有新的策略出现,只需要创建一个新的策略类,无须修改原代码。

相关推荐
西猫雷婶3 分钟前
python学opencv|读取图像(十六)修改HSV图像HSV值
开发语言·python·opencv
weixin_5375904514 分钟前
《Java编程入门官方教程》第八章练习答案
java·开发语言·servlet
lsx20240618 分钟前
MVC 发布
开发语言
qincjun35 分钟前
文件I/O操作:C++
开发语言·c++
CodeClimb40 分钟前
【华为OD-E卷-最左侧冗余覆盖子串 100分(python、java、c++、js、c)】
java·python·华为od
小马超会养兔子42 分钟前
如何写一个数字老虎机滚轮
开发语言·前端·javascript·vue
汉克老师1 小时前
2023年厦门市第30届小学生C++信息学竞赛复赛上机操作题(三、2023C. 太空旅行(travel))
开发语言·c++
Q_19284999061 小时前
基于Spring Boot的大学就业信息管理系统
java·spring boot·后端
HvrI11 小时前
JS使用random随机数实现简单的四则算数验证
开发语言·javascript