设计模式简要总结

设计模式简要学习

策略模式

它定义了一系列的算法,将每个算法封装起来,并使它们可以互相替换。策略模式使得算法的变化独立于使用算法的客户端。

适用场景:

  1. 当一个系统中有多个算法,需要动态切换时。
  2. 当一个类有多个行为,可以通过定义不同的策略来实现这些行为。
  3. 当算法的变化不应该影响到使用算法的客户端时。

装饰器模式

装饰器设计模式是一种结构型的设计模式,它允许我们在运行时动态地给一个对象添加额外的行为,并且不需要修改原有的类。它可以有效地避免类爆炸问题,提高代码的可维护性和复用性。同时,装饰器模式也具有灵活、可扩展和易于维护等优点,是一种非常实用和常用的设计模式。

使用装饰器模式时,我们将新增的行为包装在一个装饰器类中,与原有类具有相同的接口。这个装饰器类可以包含一个对于原有类的引用,在调用原有类的方法之前或之后执行额外的逻辑,从而实现对原有类的增强。

装饰器模式的核心思想就是「包装」,通过不断地向对象上叠加新的行为,使得对象具有了更多的功能和特性,同时保持了对象的原有接口和结构不变

总结

装饰器设计模式是一种结构型设计模式,它允许在不改变原有对象的基础上,动态地添加新的行为或修改已有行为;

通过将对象传递给装饰器函数或类,可以创建一个包装对象,该对象可以在执行原始对象的操作之前或之后执行其他操作;

这种模式使得代码更加灵活和可扩展,而不需要在原始对象中硬编码所有可能的变体

模板方法模式

模板模式是一种行为型设计模式,它定义了一个算法的骨架,并允许子类重写特定步骤的实现方式。模板模式将算法的通用部分放在一个抽象父类中,而将不同的实现细节留给具体的子类去实现。当我们需要在多个类之间共享某些相同的行为时,可以考虑使用模板方法模式。

模板模式常常被用来处理算法的变化和复杂性,尤其是当算法需要多个步骤、每个步骤的实现方式不同、以及需要在运行时动态决定算法的具体实现时。通过使用模板模式,我们可以避免代码重复,并且为子类提供一个清晰的框架,以便于更好地组织代码逻辑。

模板模式通常由两部分组成:抽象父类和具体子类。抽象父类包含了算法的高层次结构,而具体子类则负责实现算法的具体步骤。通常情况下,抽象父类会定义算法的骨架,也就是算法所需的各个步骤以及它们之间的关系。具体子类则会实现这些步骤的具体实现方式。

模板方法模式的应用场景

以下是一些模板方法模式的应用场景:

数据库操作:在进行数据库操作时,我们可能需要执行一系列相同的步骤,例如连接数据库、执行 SQL 查询、处理结果等。这些步骤可以抽象成一个模板方法,而每个具体的数据库操作可以通过继承该模板方法并重写其中的某些步骤来实现;

游戏开发:在游戏开发中,我们可能需要编写一些游戏关卡和任务,这些关卡和任务都有一些通用的流程,例如初始化、开始、结束等。这些流程可以抽象成一个模板方法,而每个具体的游戏关卡和任务可以通过继承该模板方法并重写其中的某些步骤来实现;

软件框架:在软件框架开发中,我们可能需要为用户提供一些基础功能,例如日志记录、异常处理等。这些功能可以抽象成一个模板

迭代器模式

迭代器模式。对应java中的具体demo是iterator遍历接口。本质就是,针对不同对象,比如list,tree,list等不同容器的遍历,如果每一个都交给客户端实现,不利于维护。所以使用迭代器模式,提供一个统一的用来遍历,客户不需要关注具体实现。

代理模式

静态代理,动态代理。解决什么问题? 原来的类,不能修改,这个时候,通过一个代理类,实现增强,修改原来类的功能。

java中动态代理使用非常广泛。AOP等很多技术都是基于动态代理来实现。

门面模式

  • 定义:门面模式是为子系统提供一组统一的接口,定义一组高层接口,让子系统更容易使用。
  • 比如:一个系统A,提供a,b,c,d四个接口。利用门面模式,我们提供一个包裹a,b,c,d接口调用的门面接口X给系统B直接使用。

部分转载

作者:LeetCode

链接:https://leetcode.cn/leetbook/read/java-interview-breakthrough/7tm2t2/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐
渣哥12 小时前
原来 Java 里线程安全集合有这么多种
java
间彧12 小时前
Spring Boot集成Spring Security完整指南
java
间彧13 小时前
Spring Secutiy基本原理及工作流程
java
数据智能老司机13 小时前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
Java水解14 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
数据智能老司机14 小时前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
洛小豆16 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学16 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole16 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊16 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端