《笑谈设计模式》 — 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)

一、创建型:未完待续

二、结构型:

三、行为型:

相关推荐
xlsw_10 分钟前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹1 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭1 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫2 小时前
泛型(2)
java
超爱吃士力架2 小时前
邀请逻辑
java·linux·后端
南宫生2 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石2 小时前
12/21java基础
java
李小白662 小时前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp2 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
装不满的克莱因瓶3 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb