《笑谈设计模式》 — 23种尝鲜版(未完待续......

引子:无论在平时开发过程中,还是深夜研读源码亦或者面试时都对遇到------设计模式。比如说Spring中的单例模式(bean单例)、工厂模式(bean创建)、代理模式(动态代理)、策略模式等。我们将设计模式分为创建型、结构型、行为性三大类。本篇文章带你一次搞定23种设计模式。

Spring中设计模式
工厂模式 (Factory Pattern)

Spring 使用工厂模式来创建和管理对象。

例如,可以通过配置文件或注解定义工厂方法,让 Spring 根据需要创建相应的对象实例。
单例模式 (Singleton Pattern)

Spring 容器默认将 Bean 定义为单例模式,即每个 Bean 组件在 Spring 容器中只有一个实例。

这种模式减少了对象的创建和销毁次数,提高了性能和资源利用率。
策略模式 (Strategy Pattern)

在 Spring Boot 应用中,当需要根据不同条件执行不同的算法或行为时,可以使用策略模式。

例如,定义一系列的算法,并将它们封装在一起,以便可以根据条件选择使用其中的一个。
代理模式 (Proxy Pattern)

Spring AOP(面向切面编程)使用代理模式来实现横切关注点(如事务管理、日志记录等)。

通过代理对象来包装目标对象,从而在不修改原有代码的情况下添加新的功能。
模板方法模式 (Template Method Pattern)

Spring 中的 JdbcTemplate 和其他类似的 DAO 支持类使用了模板方法模式。

它定义了一个算法的骨架,而将一些步骤延迟到子类中实现。
观察者模式 (Observer Pattern)

用于处理事件监听和发布订阅模式。

Spring 中的事件传播机制就使用了观察者模式。
适配器模式 (Adapter Pattern)

当需要将一个类的接口转换成客户端期望的另一个接口时,可以使用适配器模式。

例如,在集成第三方服务时,可能需要适配其接口与现有系统兼容。
装饰器模式 (Decorator Pattern)

用于动态地给一个对象添加一些额外的职责。

Spring 中的 AOP 可以看作是一种特殊的装饰器模式应用。

这些设计模式在 Spring Boot 中的应用可以帮助开发者编写更加灵活、模块化和易于扩展的代码。

Q&A:什么是设计模式?

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当⻓的一段时间的试验和错误总结出来的。

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

Q&A:软件设计原则有哪些?

  1. 开闭原则(Open Closed Principle,OCP)
  2. 单一职责原则(Single Responsibility Principle, SRP)
  3. 里氏替换原则(Liskov Substitution Principle,LSP)
  4. 依赖倒置原则(Dependency Inversion Principle,DIP)
  5. 接口隔离原则(Interface Segregation Principle,ISP)
  6. 合成/聚合复用原则(Composite/Aggregate Reuse Principle,C/ARP)
  7. 最少知识原则(Least Knowledge Principle,LKP)或者迪米特法则(Law of Demeter,LOD)

一、创建型:未完待续

二、结构型:

三、行为型:

相关推荐
爱上语文15 分钟前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
荆州克莱17 分钟前
springcloud整合nacos、sentinal、springcloud-gateway,springboot security、oauth2总结
spring boot·spring·spring cloud·css3·技术
serve the people19 分钟前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
qmx_071 小时前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战1 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
技术无疆3 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
罗政6 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端
架构文摘JGWZ6 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
拾光师7 小时前
spring获取当前request
java·后端·spring
aPurpleBerry7 小时前
neo4j安装启动教程+对应的jdk配置
java·neo4j