不想认命,就去拼命。我始终相信,付出就会有收获,或大或小、或早或迟,始终不会辜负你的努力。有一种落差是,你总羡慕别人的成功,自己却不敢开始。
你是否在面试中被问过设计模式?而回答的时候只能回答单例模式、工厂模式、代理模式等少数几个,而且还不清楚实现的原理和应用场景,本篇文章就将为你带来常见的设计模式面试题及其答案。
拓展阅读:
设计模式一般被分为三大类二十三种:
开闭原则(总纲)、里氏替换原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特法则。
一个软件实体应该对扩展开放,对修改关闭。 即:软件实体应该在尽量不修改原有代码的情况下扩展。
所有引用基类(父类、接口)的地方,都必须能够透明的使用其子类的对象。
例如:我喜欢动物(父类)—(替换为)—》我喜欢狗(子类)【√】
反例:我喜欢狗(子类)—(替换为)—》我喜欢动物(父类)【×】
依赖倒置的核心原则就是面向接口编程。
上层模块不应该依赖下层模块,两者应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
例如:学生写字需要用到笔,学生类里面就要依赖笔这个接口,而不应该依赖某一种笔(比如铅笔)。
一个类只负责一个功能领域中相应的职责,换而言之,一个类应该只有一个引起它变化的原因。
如果一个类承担了过多的职责,就会使多个职责耦合在一起,只要有一个职责变化,那么就需要改动这个类。
使用多个专门的接口,而不使用单一的总接口。例如:狗会叫还会跑,叫和跑应该分成两个接口,狗分别实现这两个接口,而不应该将叫和跑放在同一个接口里。
迪米特法则又称“最少知识原则”,即一个类应该只拥有有限的知识,一个类应该尽可能少的与其它类发生作用。
在迪米特法则中,一个类应该只与它的“朋友”通信,如果要用到其它类的方法,可以通过朋友转发调用。
迪米特法则中,“朋友”包括以下几种:
迪米特法则的目的就是让类之间解耦,降低类之间的耦合度,使类的复用性增强。
简单工厂:根据传递给工厂类的不同参数创建不同的产品。例如:给生产汽车的工厂传递不同的参数生产不同的汽车。
工厂方法:根据自己的需要使用不同的工厂来生产产品。例如:我要一辆奥迪汽车,那么就找奥迪汽车的工厂来生产奥迪汽车。
抽象工厂:根据自己的需要使用不同的工厂来生产同一个产品族的多个产品。例如:我要一辆奥迪汽车,还要奥迪牌的手机(假如奥迪生产手机),那么就找奥迪的工厂来生产奥迪汽车和奥迪手机。
观察者模式提供了一种降低一对多依赖关系的方法,使对象间的紧耦合关系变为松耦合关系。
发布订阅模式可以说是观察者模式的高级实现,它比观察者模式中间多了一个经纪人的角色,使对象间的耦合度进一步降低甚至可以说是无耦合状态。
具体的区别可以用一张图来说明:
文章浏览阅读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
文章浏览阅读1k次。今天的目标是使用ListView控件完成一个布局,左边一个图标,右边分为上线两部分:标题和内容;ListView在使用时要考虑内存优化,就是使用ViewHolder(自己定义的一个内部类,存储布局中的控件的索引)适配器使用继承自ArrayAdapter的适配器,也可以继承自BaseAdapter(要多写几个方法)目前虽然还有公司在使用,但是后面大家陆续都会转向RecyclerView,_使用listview需要下载什么软件吗
文章浏览阅读1.6k次。摩斯密码_摩斯密码是通用的吗
文章浏览阅读797次,点赞13次,收藏18次。物联网架构。
文章浏览阅读1.7k次。在一次做项目的时候,我封装一个axios的文件,想引入qs组件,因为axios已经自带qs组件了,所以直接。好了,工作忙,不吹了,直接在src文件目录下创建一个 shime-vue.d.ts文件,在里面写入。但是,它居然给我报了如下的提示(这张图片是我写博客的时候找的类似的一张图片,当成qs就好)保存,就可以了,qs可以正常引入了,不会再报找不到模块了。_找不到模块“qs”或其相应的类型声明
文章浏览阅读1.2w次。本来以为是和java一样写法。结果找了半天也没找到。原来有静态构造函数一样的功能。class SimpleClass{ // Static constructor static SimpleClass() { //... }}静态构造函数具有以下特点:静态构造函数既没有访问修饰符,也没有参数_java static块 c#
文章浏览阅读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:
文章浏览阅读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_本关任务:能分页读取表中数据,针对大数据量进行简单优化。
文章浏览阅读5.3k次。WPF 控件专题 Image控件详解_wpf image
文章浏览阅读2.7k次。 从今天开始学习OMPL库函数,自己是一个没有恒心的人,而OMPL库又实在比较庞大,这算是写在前面的自我鼓励吧。记录这些学习笔记是自我加深认识的一个过程,肯定存在许多错误,希望有看到错误的小伙伴可以不吝指教,也希望可以和大家多多交流,相互学习。 在了解OMPL库之前还有一步是必须的,那就是下载OMPL库,就像我们看一本书,你总得先有这本书吧 我自己在网上找了一..._ompl time
文章浏览阅读2.3k次。1. 气泡图_pmp敏感性分析
文章浏览阅读3.4k次,点赞11次,收藏45次。一、发起沿和捕获沿发起沿:数据发送的时钟沿叫发起沿。捕获沿:数据接收的时钟沿叫捕获沿。发起沿和捕获沿之间一般情况下相差一个时钟周期。二、四种时序路径模型1.外部输入端口到内部寄存器的路径。2.内部寄存器之间的时序路径。3.内部寄存器到外部端口的时序路径。4.输入到输出的组合路径。上述四种时序路径的起点和终点start end point1.Device A/clk rega/D2.rega/clk regb/D_时序