前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式面试】行为型设计模式你清楚几个?

【设计模式面试】行为型设计模式你清楚几个?

作者头像
用户4919348
发布2022-05-10 08:56:16
2930
发布2022-05-10 08:56:16
举报
文章被收录于专栏:波波烤鸭波波烤鸭
在这里插入图片描述
在这里插入图片描述

【金三银四】设计模式篇

1.谈谈你对设计模式的理解

1.首先谈设计模式的作用:经验的传承,提高了软件复用的水平,最终达到提高软件开发效率

设计原则

简单说明

单一职责

一个类只负责一项职责

里氏替换原则

子类可以扩展父类的功能,但不能改变父类原有的功能

依赖倒置原则

要依赖于抽象,不要依赖于具体,核心思想是面向接口编程

接口隔离原则

建立单一接口,不要建立庞大臃肿的接口,<br>尽量细化接口,接口中的方法尽量少

迪米特法则 (最少知道原则)

一个对象应该对其他对象保持最少的了解

开闭原则

对扩展开放,对修改关闭

2.设计模式的分类

image.png
image.png

3.创建型模式:都是用来帮助我们创建对象的!

image.png
image.png

4.结构性模式:关注对象和类的组织

image.png
image.png

5.行为型模式:关注系统中对象之间的相互交换,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责,共有11中模式

image.png
image.png

行为型模式

  行为型模式关注的是对象之间的通信,也就是描述多个类或者对象之间,通过协作共同完成一个任务。主要涉及的是 对象算法之间职责的分配。

行为型模式分为两类:

  • 类行为模式: 通过继承机制来在类间分派行为。 主要是通过多态来分配父类和子类的职责
  • 对象行为模式: 通过组合或聚合,在对象间分派行为。通过对象关联等方式来分配类的职责。
image.png
image.png

1.谈谈你对解释器模式的理解

1.1 解释器模式的作用

  解释器模式在业务开发面是很少接触到的。主要的作用是定义的解释器来解析各种表达式,比如SQL语句,SPEL表达式,权限注解中的表达式 hasAnyRole(‘ROLE_ADMIN’)等。

1.2 解释器的应用

  比较常见的应用比如Spring中的针对SPEL表达式做的解析处理

代码语言:javascript
复制
    public static void main(String[] args) {
        SpelExpressionParser parser = new SpelExpressionParser();
        Expression expression = parser.parseExpression("500-100*2+60");
        Object value = expression.getValue();
        System.out.println("value = " + value);
    }

2.谈谈你对模板模式的理解

2.1 模板模式的作用

  模板模式是一种相对简单的设计模式。作用是在父类中固定程序的执行顺序,具体的实现在子类中实现。比如银行定义每个人去银行开户的流程,

  1. 取号
  2. 填写单子
  3. 等待
  4. 办理业务
  5. 结束

然后每个人来开户都会走这个流程,只是每个人的具体操作内容会有区别

2.2 模板模式的应用

  模板模式的应用就比较多如下:

  1. Servlet中的doGet和doPost方法
  2. Spring中的JdbcTemplate
  3. MyBatis中的Executor处理

3.责任链模式

3.1 责任链模式的作用

  将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象处理。

image.png
image.png

3.2 责任链模式的应用

  责任链模式的应用场景比较多,对大家来说印象比较深刻的应该是SpringSecurity中的处理请求的过滤器链了。

image.png
image.png

  可以和面试官具体聊下SpringSecurity中的这块设计。当然还有一些其他的也可聊比如:

  1. Java中,异常机制就是一种责任链模式。一个try可以对应多个catch,当第一个catch不匹配类型,则自动跳到第二个catch.
  2. Javascript语言中,事件的冒泡和捕获机制。Java语言中,事件的处理采用观察者模式。
  3. SpringMVC中,拦截器的调用也是典型的责任链模式
  4. 同样的Servlet中的过滤器链同样是责任链模式的实现。

4.观察者模式

4.1 观察者模式的作用

  建立对象与对象之间的依赖关系,一个对象发生改变时,会自动通知其他对象。这个场景中,发生改变的对象被称为观察目标,被通知的对象称为观察者。一个观察目标可以有多个观察者,而这些观察者之间可以没有联系,可以根据需要增加或删除观察者。

image.png
image.png

4.2 观察者模式的应用

  观察者模式在Java编程中用到最多的可能就是事件模块的处理,可以和面试官详细的聊下Spring的事件管理机制或者SpringBoot的事件处理机制。我们以SpringBoot的事件机制为例来说明

https://blog.csdn.net/qq_38526573/article/details/122143258 单独通过一篇文章来说明事件的本质。

5.策略模式

5.1 策略模式的作用

  策略模式的作用就是我们想要实现某个目的,实现的方式可以有很多种,那么这里的每一种实现方式都可以称为一种策略。比如:

image.png
image.png

  我们可以将每一种交通方式都封装为一个独立的类,这就是一种策略。为了保证策略的一致性,还可以用一个抽象的交通方式类 来 做交通方式的定义。

5.2 策略模式的应用

  策略模式在实际开发中用到的同样会比较多。

  1. AOP 中根据不同的策略可以通过JDK动态代理或者CGLIB代理来创建代理对象
  2. Spring框架中的Resources接口,资源访问的策略
  3. Servlet中的service方法,会根据客户端的不同提交方式来调用对应的doGet或者doPost方法来处理请求
  4. Shiro中的多Realm认证中,根据我们不同的配置可以使用所有Realm认证通过或者其中一个认证通过等
  5. SpringSecurity中的Authentication对象的存储方式

6.迭代器模式

6.1 迭代器模式的作用

场景:访问聚合对象中的各个元素的时候,比如链表的遍历。我们一般是将遍历的方法也放在链表类中。但是如果需要修改遍历方法,就需要修改链表类的代码,违背了开闭原则。

迭代器模式就是在客户访问和聚合类之间插入一个迭代器,这样就将聚合对象遍历方法解耦了,并且对外隐藏其实现细节。

image.png
image.png

6.2 迭代器模式的应用

  1. JDK中的List/Set集合中的迭代器

7.中介者模式

7.1 中介则模式的作用

  对象之间具有很强的关联性,而且有大量的相互调用,这种情况下,如果一个对象发生了变化,就需要追踪该对象关联的其他对象,并进行相应的处理,这就变得很复杂。而中介者模式,就是用一个中介者对象来封装一系列的对象交互,中介者使各对象不需要显式的相互引用,这就使得系统变得低耦合。比如:

image.png
image.png

假如没有总经理。下面三个部门:财务部、市场部、研发部。财务部要发工资,让大家核对公司需要跟市场部和研发部都通气;市场部要接个新项目,需要研发部处理技术、需要财务部出资金。市场部跟各个部门打交道。 虽然只有三个部门,但是关系非常乱。

image.png
image.png

实际上,公司都有总经理。各个部门有什么事情都通报到总经理这里,总经理再通知各个相关部门。

7.2 中介则模式的应用

  1. MVC模式中的C,控制器就是一个中介者对象,M和V都和C打交道
  2. 代理对象中的invoke方法,客户端和目标对象都是通过invoke来打交到的。

8.状态模式

场景: 如果一个对象的行为会根据 其某个属性的变化而不同,那这个属性就可以被称为该对象的状态。这样的对象也被称为有状态对象(stateful)。如果这样的对象因为某些事件,其内部状态发生了改变,那么系统的行为也要随之发生变化的话,就可以使用状态模式。

9.命令模式

场景:请求的发送者和接收者之间解耦,让对象之间的调用关系更加灵活。发送者和接收者之间没有直接的引用关系,发送请求的对象只需要知道如何发送,而不必关心如何完成请求。

10.备忘录模式

场景:记录一个对象的内部状态,当用户后悔时能撤销当前的操作,是数据恢复到它原来的状态。比如我们编程的时候,ctrl+z 就是撤销当前操作,恢复到修改前的状态。又叫快照模式。

11.访问者模式

场景:有些集合对象中会有多种不同的元素,每种元素都有不同的访问者 和 处理方式。这种被处理的数据元素相对稳定,但是处理方式比较多样的情况,可以用访问者模式来处理。

访问者模式将数据结构中的各元素的操作分离出来,封装成独立的类,使其在不改变数据结构的前提下,可以添加作用于这些元素的新操作。为数据结构中的每个元素提供多种访问方式。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【金三银四】设计模式篇
  • 1.谈谈你对设计模式的理解
  • 行为型模式
    • 1.谈谈你对解释器模式的理解
      • 1.1 解释器模式的作用
      • 1.2 解释器的应用
    • 2.谈谈你对模板模式的理解
      • 2.1 模板模式的作用
      • 2.2 模板模式的应用
    • 3.责任链模式
      • 3.1 责任链模式的作用
      • 3.2 责任链模式的应用
    • 4.观察者模式
      • 4.1 观察者模式的作用
      • 4.2 观察者模式的应用
    • 5.策略模式
      • 5.1 策略模式的作用
      • 5.2 策略模式的应用
    • 6.迭代器模式
      • 6.1 迭代器模式的作用
      • 6.2 迭代器模式的应用
    • 7.中介者模式
      • 7.1 中介则模式的作用
      • 7.2 中介则模式的应用
    • 8.状态模式
      • 9.命令模式
        • 10.备忘录模式
          • 11.访问者模式
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档