面试必问的设计模式该如何回答 - 面试总结之设计模式专篇_面试中怎么聊设计模式-程序员宅基地

技术标签: 面试  面试总结  java  设计模式  

不想认命,就去拼命。我始终相信,付出就会有收获,或大或小、或早或迟,始终不会辜负你的努力。有一种落差是,你总羡慕别人的成功,自己却不敢开始。

你是否在面试中被问过设计模式?而回答的时候只能回答单例模式、工厂模式、代理模式等少数几个,而且还不清楚实现的原理和应用场景,本篇文章就将为你带来常见的设计模式面试题及其答案。

拓展阅读:

设计模式专栏,多种设计模式详解及代码示例!

1、说几种你熟悉的设计模式。

设计模式一般被分为三大类二十三种:

创建型模式:
  1. 工厂方法模式(Factory Method)
  2. 抽象工厂模式(Abstract Factory)
  3. 单例模式(Singleton)
  4. 建造者模式(Builder)
  5. 原型模式(Prototype)
结构型模式:
  1. 适配器模式(Adapter)
  2. 装饰器模式(Decorator)
  3. 代理模式(Proxy)
  4. 外观模式(Facade)
  5. 桥接模式(Bridge)
  6. 组合模式(Composite)
  7. 享元模式(Flyweight)
行为型模式:
  1. 策略模式(Strategy)
  2. 模板方法模式(Template Method)
  3. 观察者模式(Observer)
  4. 迭代器模式(Iterator)
  5. 责任链模式(Chain of Responsibility)
  6. 命令模式(Command)
  7. 备忘录模式(Memento)
  8. 状态模式(State)
  9. 访问者模式(Visitor)
  10. 中介者模式(Mediator)
  11. 解释器模式(Interpreter)

2、说一说设计模式的六大原则

开闭原则(总纲)、里氏替换原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特法则。

设计模式六大原则

开闭原则:

一个软件实体应该对扩展开放,对修改关闭。 即:软件实体应该在尽量不修改原有代码的情况下扩展。

里氏替换原则:

所有引用基类(父类、接口)的地方,都必须能够透明的使用其子类的对象。

例如:我喜欢动物(父类)—(替换为)—》我喜欢狗(子类)【√】

反例:我喜欢狗(子类)—(替换为)—》我喜欢动物(父类)【×】

依赖倒置原则:

依赖倒置的核心原则就是面向接口编程。

上层模块不应该依赖下层模块,两者应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。

例如:学生写字需要用到笔,学生类里面就要依赖笔这个接口,而不应该依赖某一种笔(比如铅笔)。

单一职责原则:

一个类只负责一个功能领域中相应的职责,换而言之,一个类应该只有一个引起它变化的原因。

如果一个类承担了过多的职责,就会使多个职责耦合在一起,只要有一个职责变化,那么就需要改动这个类。

接口隔离原则:

使用多个专门的接口,而不使用单一的总接口。例如:狗会叫还会跑,叫和跑应该分成两个接口,狗分别实现这两个接口,而不应该将叫和跑放在同一个接口里。

迪米特法则:

迪米特法则又称“最少知识原则”,即一个类应该只拥有有限的知识,一个类应该尽可能少的与其它类发生作用。

在迪米特法则中,一个类应该只与它的“朋友”通信,如果要用到其它类的方法,可以通过朋友转发调用。

迪米特法则中,“朋友”包括以下几种:

  1. 当前对象 this
  2. 以参数形式传递到当前对象方法中的对象
  3. 当前对象的成员对象
  4. 如果当前对象是一个集合,那么集合中的对象也是“朋友”。
  5. 当前对象所创建的对象

迪米特法则的目的就是让类之间解耦,降低类之间的耦合度,使类的复用性增强。

3、简单工厂模式、工厂方法模式、抽象工厂模式的区别?

简单工厂:根据传递给工厂类的不同参数创建不同的产品。例如:给生产汽车的工厂传递不同的参数生产不同的汽车。

工厂方法:根据自己的需要使用不同的工厂来生产产品。例如:我要一辆奥迪汽车,那么就找奥迪汽车的工厂来生产奥迪汽车。

抽象工厂:根据自己的需要使用不同的工厂来生产同一个产品族的多个产品。例如:我要一辆奥迪汽车,还要奥迪牌的手机(假如奥迪生产手机),那么就找奥迪的工厂来生产奥迪汽车和奥迪手机。

4、建造者模式和工厂模式的区别

  1. 建造者模式创建的是同一个类不同表示的对象;工厂模式创建的是不同的类的不同的对象。
  2. 抽象工厂模式可以创建一系列同一个产品族的产品(如:电脑的各种配件),建造者模式可以把一系列同一个产品族的产品组装成更复杂的产品(电脑)。

5、观察者模式和发布订阅模式的区别?

观察者模式提供了一种降低一对多依赖关系的方法,使对象间的紧耦合关系变为松耦合关系。

发布订阅模式可以说是观察者模式的高级实现,它比观察者模式中间多了一个经纪人的角色,使对象间的耦合度进一步降低甚至可以说是无耦合状态。

具体的区别可以用一张图来说明:
观察者模式和发布订阅模式对比

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_27245917/article/details/107689422

智能推荐

Centos7搭建hadoop的错误(datanode)和(nodeManager)没启动的解决方法_hadoop集群部署时datenode,nodemanger-程序员宅基地

文章浏览阅读3.1k次,点赞4次,收藏14次。1.datanode没有启动,就要到slaves节点去找错误。解决方法:前提是配置文档没错,删除datanode的格式化信息,再重新格式化#注意:在datanode节点上删除[hadoop@node2 ~]$ cd /home/hadoop/dfs/data/current[hadoop@node2 current]$rm VERSION[hadoop@node3 ~]$ cd ..._hadoop集群部署时datenode,nodemanger

安卓-ListView基本使用_使用listview需要下载什么软件吗-程序员宅基地

文章浏览阅读1k次。今天的目标是使用ListView控件完成一个布局,左边一个图标,右边分为上线两部分:标题和内容;ListView在使用时要考虑内存优化,就是使用ViewHolder(自己定义的一个内部类,存储布局中的控件的索引)适配器使用继承自ArrayAdapter的适配器,也可以继承自BaseAdapter(要多写几个方法)目前虽然还有公司在使用,但是后面大家陆续都会转向RecyclerView,_使用listview需要下载什么软件吗

摩斯密码_摩斯密码是通用的吗-程序员宅基地

文章浏览阅读1.6k次。摩斯密码_摩斯密码是通用的吗

物联网架构-程序员宅基地

文章浏览阅读797次,点赞13次,收藏18次。物联网架构。

已安装对应模块,但报无法找到模块“XXX”的声明文件的解决方案_找不到模块“qs”或其相应的类型声明-程序员宅基地

文章浏览阅读1.7k次。在一次做项目的时候,我封装一个axios的文件,想引入qs组件,因为axios已经自带qs组件了,所以直接。好了,工作忙,不吹了,直接在src文件目录下创建一个 shime-vue.d.ts文件,在里面写入。但是,它居然给我报了如下的提示(这张图片是我写博客的时候找的类似的一张图片,当成qs就好)保存,就可以了,qs可以正常引入了,不会再报找不到模块了。_找不到模块“qs”或其相应的类型声明

C# 静态代码块(静态构造函数)_java static块 c#-程序员宅基地

文章浏览阅读1.2w次。本来以为是和java一样写法。结果找了半天也没找到。原来有静态构造函数一样的功能。class SimpleClass{ // Static constructor static SimpleClass() { //... }}静态构造函数具有以下特点:静态构造函数既没有访问修饰符,也没有参数_java static块 c#

随便推点

Web安全工具大集合-程序员宅基地

文章浏览阅读4.3k次。Test sites / testing groundsSPI Dynamics (live) – http://zero.webappsecurity.com/Cenzic (live) – http://crackme.cenzic.com/Watchfire (live) – http://demo.testfire.net/Acunetix (live) – http:

MySQL开发技巧 - 分页和索引_本关任务:能分页读取表中数据,针对大数据量进行简单优化。-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏3次。第1关:MySQL 分页查询本关任务:能分页读取表中数据,针对大数据量进行简单优化。USE Products;#请在此处添加实现代码########## Begin ###########1.分页查询select prod_id from products limit 5,5;#2.用子查询优化分页查询语句select prod_id from products where prod_id >=(select prod_id from products limit 10,1) l_本关任务:能分页读取表中数据,针对大数据量进行简单优化。

WPF 控件专题 Image控件详解_wpf image-程序员宅基地

文章浏览阅读5.3k次。WPF 控件专题 Image控件详解_wpf image

OMPL库学习笔记0--写在前面_ompl time-程序员宅基地

文章浏览阅读2.7k次。 从今天开始学习OMPL库函数,自己是一个没有恒心的人,而OMPL库又实在比较庞大,这算是写在前面的自我鼓励吧。记录这些学习笔记是自我加深认识的一个过程,肯定存在许多错误,希望有看到错误的小伙伴可以不吝指教,也希望可以和大家多多交流,相互学习。 在了解OMPL库之前还有一步是必须的,那就是下载OMPL库,就像我们看一本书,你总得先有这本书吧 我自己在网上找了一..._ompl time

PMP之项目风险管理---实施定量风险分析_pmp敏感性分析-程序员宅基地

文章浏览阅读2.3k次。1. 气泡图_pmp敏感性分析

时序分析的基本概念和术语-程序员宅基地

文章浏览阅读3.4k次,点赞11次,收藏45次。一、发起沿和捕获沿发起沿:数据发送的时钟沿叫发起沿。捕获沿:数据接收的时钟沿叫捕获沿。发起沿和捕获沿之间一般情况下相差一个时钟周期。二、四种时序路径模型1.外部输入端口到内部寄存器的路径。2.内部寄存器之间的时序路径。3.内部寄存器到外部端口的时序路径。4.输入到输出的组合路径。上述四种时序路径的起点和终点start end point1.Device A/clk rega/D2.rega/clk regb/D_时序

推荐文章

热门文章

相关标签