00:00
我们来看一下设计模式的重要性。那有些同学都说老师设计模式的重要性,为什么我们要单独的说一下呢?主要是讲这个重要性的同时,也是在给大给大家传递一个什么信息呢?就说设计模式在什么地方可能用得到,实际上他是他是在讲这个问题,明白吧,因为重要性,我说一句话很重要就完了嘛,那为什么重要呢?那肯定跟我们设计模式它在使用的场景,在什么地方用得到是有密切关系的,大家理解我的意思吧。好,我们来先看一下在软件工程中设计模式的,它这个英文叫design pattern。就是设计模式,它是对软件设计中普遍存在的,或者叫做反复出现的各种问题提出的一种解决方案,大家注意听这句话啊,也就是说在我们长期的这个软件编程过程中,我们的程序员或者工程师,我们发现呢,有一些问题,他跟我们这一个项目是没有关系的。
01:06
你做OA也好,你做ERP也好,你做这个电子商城也好,等等,它都会出现一些普遍存在的问题,就这种问题呢。他在各个项里面都可以出现,明白我的意思吧,那这个时候呢,他就会提出一种解决方案,就是统一大家都可以用的。那么这个术语就是我们所说的这个设计模式,这个术语呢,他是由这一个人叫做埃里希伽玛,这个人在1990年他从建筑设计领域引入到计算机科学的。那为什么他会从另外一个领域引入设计模式这个概念呢?OK,是因为我们这个软件工程呢,它本身是一个,并不是一个传统性的行业,大家想一想,计算机是什么时候出现的,而我们软件公司软件工程又是什么时候出现的,对不对?实际上软件工程这个概念是上个世纪的七七十年代左右才出现,后面才慢慢引入了设计模式这个概念。
02:09
而这个设计模式这个概念呢,是从建筑领域领结,因为我们在做建筑的时候呢,往往会先设计再去盖楼,就好比我给大家看的下一个图。那设计模式怎么去理解它的这个设计这个概念呢?你想这样一个问题,比如说我们现在要去盖这种高楼大厦,请同学们思考,你能不能上去就盖?我想问大家,你能不能上去就改?你上去就盖,你能盖100层吗?你盖不了,为什么盖不了?因为你还没盖到第二层的时候,这个房子垮了。它的稳定性,它的牢固性不够,是不是所有的在建这种大楼的时候,首先是有一个设计师,他先设计一把图纸,然后告诉你应该第一层怎么盖,然后一层一层怎么盖,打地基打多大,是不是这样的道理啊,同学们,那大家再看这旁边有一个小破屋。
03:05
同学们,小破屋相对来讲,它呢就不需要做太多的设计,大致明白就行了,我就可以干对吧,因为这种房子呢,它要求比较相对没有那么高,它就是一层嘛,就完了,你看这个破朽不堪,风一吹没准就倒了,因此我们这个设计呢,往往是出于怎样一种考虑呢?就说将来我们这个软件,我们希望他做的比较大,我们要考虑很多问题。我们在做一个软件的时候呢,我们希望我们这个软件有复用性,有高的稳定性,有扩展性,有很好的维护性,有代码的重用性,对不对,所以说我们才提出这个设计,如果说你写一段程序,打个比方,同学们你写一段代码,这段代码就是很小的一段代码。就算代码完成的功能呢,也比较少,就是功能也比较少,就很单一,代码量也很少,那么同学们你需要设计吗?
04:02
我觉得可能就不需要写个函数就完了,或者写一个方法就完了,所以说我们这个设计模式其实是针对我们这个软件将来具有更好的复用性、扩展性、可读性、规范性,还有它的稳定性等等等等,明白我的意思吧。好,这是这么一个概念,我们再来看设计模式的重要性。我们拿一个实际的工作经验来讲,当一个项目开发完了过后,如果客户提出新的功能,你怎么办?这种可能性是存在的,是不是就说我们一个项目写完了,但是客户在后期他可能提出说,诶。某某某某公司,我现在需要新新加一个功能,这种需求一定是存在的,说老师那那那那那为什么呢?因为你的需求可能随着时间的变化,随着随着这个时间和时代的发展,它可能会提出新的新的功能,你不能说我把这个功能做完了以后,你绝对不能变,这是很难的。
05:07
很难的,你比如说我们常用的QQ、微信,包括我们用的操作系统Windows,包括Linux,请问它的功能是一天就变得这么强大吗?包括我们的微信对不对,所以说它必然会有一种功能的新的功能出来,那这个时候如果你的这个软件,你这个项目写的不够好。那么新增加一个功能成本太高,那说明你这个软件的设计就不合理。所以说这个我们要拥抱变化,我们再来看下一个问题,如果一个项目开发完了过后,有没有这样一种可能?原来程序离职了。为什么离职呢?可能因为不满意对吧,可能是不满意啊,你这工资太低了,我觉得很不满意,那我不想在这,我就我就我就要离职,那离完职过后是不是由你来接手了,可能有一个新的程序员,假如就是你,你接手维护这个项目怎么办?
06:02
你维护这个项目,你是不是要要首先要读懂啊,也就是说你的项目,你原先这个项目如果有很好的维护性。它的维护性很好,那么你接手就比较容易,而维护性要体现在什么地方呢?就是你的代码可读性很强。而且代码什么呢?规范性,它很规范,规范性高。如果我们拿到一段程序,我们发现这一段程序我读都读不懂。他瞎写哦,这样也行,那样写,那你想一想,你这个维护性就会很低,那你就会非常痛苦,所以你看我们这个维护性也是我们设计模式要解决的问题,假如大家都遵守相同的一种设计模式,那你接手这个项目。是不是变得比较容易了?是不是这样的道理,你出于一个项目经理的考虑,他肯定希望项目是这样子的吧?谁都不愿意说我我有一,我有一个,有一个项目,除了A程序员能读懂,别的程序员都都读不懂这个代码,这段代码好吗?你觉得显然不好,是不是好,我们再来看第五个。
07:09
那么目前程序员的门槛,门槛其实是越来越高的。在韩老师这个时代,我曾经讲过,对吧,我们零几年毕业的时候,我们要去找一份工作,找一份编程工作,It工程师工作,其实对我们要求并不高,我记得当时问的问题比较浅。确实如此,当时就问了,问了我两个算法问题,然后呢,做了一点简单的排序啊,一个写个二叉树都不算什么设计模式,提都没有提,问都没有问,直接就入职了,为什么?因为那个时候程序员相对比较少,所以别人筛选的也不会那么高,但是现在不一样,同学们,现在我们程序员是多还是少啊,肯定是多。对不对,但是呢,你人多了,我就要选了,我怎么选,我肯定要问一些比较。有水平的,水平的这个问题,比如算法呀,数据结构呀,设计模式对不对,像这种一线的it公司或叫大厂,他都会问什么问题呢?说请问你在实际项目中用过什么什么什么模式,怎么使用的,解决了什么问题?
08:13
你要是没有学设计模式,你很难回答上来。是不是因为你理解的不够透嘛,你只能把这个概念背下来,交给我们的面试官,人家满意吗?所以别人上来过就问你实际项目中你用过什么项目,用过什么设计模式啊,好,你说用过组合模式,你说你用过责任链模式,你说你用过这个桥接模式,好告诉我哪用的。哪用的?在什么模块用的,解决了什么问题?回答你一下就露馅了。而我们这个课程呢,就要站在实际项目和源码级别给大家进行讲解。哦,咱们不是空中楼阁,就要落地。好,我们再来看设计模式在软件中到底哪里用到了,我给他简单总结一下,好设计式在我们软件中它出现在什么位置,我们来聊一聊,最先前大家都知道我们是面向对象的,我们是面向对象编程。
09:06
也就是我们所说的欧欧。对不对,那么这个当我们有了面向对象这个语言过后呢,我们就要去写什么呢?我们要学习功功能模块。是这样子的吧,我们喜欢这个功能模块,而功能模块它又在哪里呢?它可以在框架中体现出来,而框架的上一个级别就是我们的架构。架构就到这一层,也就是说我们是先学了语言,然后用语言写功能模块,然后功能模块呢又集成在各种框架里面,然后框架又形成了我们架构,来我们来捋一捋。那么在功能模块这个编写的时候,我们就可以用到设计模式。加我们的算法。也就是说,我们的算法和数据结构,包括设计模式,其实是在功能模块这个地方出现的。明白,那么当然算法里面呢,我们也会或多或少的去使用到数据结构。
10:06
因为数据结构是算法的基础,是这样子吧,那框架里面又用到什么呢?同学们,框架里面注意听啊框架这个框架里面就会使用,使用到多种。多种设计模式,所以看设计模式可以出现在功能模块,它也可以是出现在我们的框架中,但是一般来讲,一个框架里面用的不仅仅是一种设计模式了。不仅仅是一种设计模式,它可能是多种设计模式,你比如supreme supreme它可能用到了我们的这个工厂模式,它也可能用到我们这个叫做什么呢?解释器模式都是有可能的,那么到了架构这一层又什么呢?OK,到了架构这一层呢?如果再往上面走,就是我们的服务器集群。对吧,服务器集群技术,所以说我们来总结,我们可以看到在功能模块里面其实就已经有设计模式了,在我们框架里面呢,也会有这个设计模式,这就是为什么刚才我们在出题的时候,大家有没有发现我们经常会在框架里面去找到设计模式的。
11:15
出现的位置,我们也可能根据别人提的一个项目,就是别人提的一个项目,这个项目里边呢,有一个功能。他会这样问你,他说。张三,请问我这有一个OA项目,这个项目里里面有个订单模块,请问你用什么模式来完成比较合理,他会这样问明白,他也可能这样问说请问我们在MY白里面用到了什么设计模式?明白这意思吧,所以说大家要跟上我的思路,也就是说我们可能在项目里面。的某一个功能模块用设计模式,我们也可能在框架里面用到一个设计模式,当然这个设计模式呢,也不能说非此即彼,它可能是综合使用。到到了我们这个架构这一层呢,它就是多种框架的一种组合,当然这里面如果研究的再往下面研究就是服务器集群,好,这就是我们说第六点,那最后我做一点小小的总结,如果你想成为一个真正的合格的工程师,就是你要站在工程这个概念来理解我们软件的话呢,那你的确是需要花一点时间来研究设计模式的。
12:23
大家可能现在老觉得设计模式很虚,其实一点都不虚。你听我后面讲课,你会发现设计模式可以说是无处不在,你离开这个设计模式,你写的代码一定不会是特别优秀的代码,而且设计模式不但可以让我们结构变得清晰,而且他也对我们程序的效率优化有非常好的这个这个帮助你比如说单利模式。为什么会用单利模式?就是因为我们有些重量级的对象,我们不希望。我们的这个程序员反复的去创建,我们就用单利模式来解决这个问题。
13:00
是不是就解决了过多的创建了一些没有用的重量级的对象,从而减少我们内存的占用率,提高我们执行的效率,是这样子的,同学们,所以说设计模式可以说是非常重要的,那现在呢?这个地方就是我们讲的设计模式的重要性,那我把刚才讲的这些内容做一个简单的整理,那刚才我们讲了这么多东西,是不是我们应该把它放在我们的笔记里面整理一下,是不是这个道理?来,我们捋捋捋刚才我们讲的内容,那往下看。那么我们在讲课的时候呢,我们先讲的是内容介绍和授课模式,我们来简单的回顾一下我们讲了哪些内容,首先呢,我们讲的是设计模式的内容,对不对?OK。设计模式内容先这做了一点介绍。设计,诶,这个地方。设计模式的内容,那设计模式内容我们首先给同学们看的是几个比较经典的面试题。引起大家对。
14:06
这个设计模式的兴趣是吧,我们先说的是。圆形。这个模式,那圆形设计模式里边呢,我探讨了三个问题,请同学们思考了三个问题对不对?把它来一个小小的编号。那把这三个问题说完了过后呢,我们也给大家说一下,源码可能会在哪里出现,我把这块呢。也给大家捋到这里了,源码我就直接先截一个小图。现在源码还没有做分析,只是给大家提了一下是不是好,这是说的第一个面试题,那第二个面试题呢,我要提的是七大原则。就说在我们这个设计模式里边呢,我们会用到一些设计的原则,那这个原则呢,有七大原则。这个原则我们还没有展开讲是吧,没有展开讲,我们说有哪七大呢?这我列出来了。
15:06
而且呢,我还举了一个例子,我说在我们工厂模式里边还会用到一个叫做OCP的原则,就这个。是吧,这是我们举的第二一个面试题,那第三个面试题呢,我们是怎么说的呢?我们说的是在实际项目中你会用到什么,对不对,那这块我就截个图吧,好吧,这块就截个图拿过来,大家一看就明白了,在这我们说到了,如果有一个叫做借贷。平台的项目里面呢,随着这个操作不同,会有状态的改变,那么我们可以用什么呢?有状态模式来对这个功能模块进行设计。好,这是这一块,好,我们紧接着再往下看。下面呢,我们又讲了一个什么,就是解释器模式,OK,解释器模式。我在这儿捋捋。对,捋捋。
16:00
解释器模式,那解释器模式呢,我放到这里了。解释器模式呢,它有这么三点,给大家做了一个介绍,就说它是什么。Um类图怎么画的,然后在源码里面怎么使用到了,对不对,那么源码出现的位置呢,我也给大家列出来了是吧?在这里看解释器模式,在spring框架里面就用到了。是这样子吧,同学们,我把它把源码给同学们截过来。现在还没有往里边深入的讲解对不对,只是简单给他做了一个介绍而已。好解释器模式,那解释器模式完了过后呢,我们又出了一个题,就是单例模式。单利模式,在我们实际开发中的单利模式,其实它的这个。方式有很多,有八种写法,对不对,后面呢,我们会一个一个的给他进行一个讲解。好,单利模式,单立模式说完了过后,我们又说了一下这一个设计模式的重要性,来捋到这来,设计模式的重要性我叫拉。
17:07
设计模式的重要性呢?我是怎么说的呢?我先提出了软件工程,它这一个是什么时候出来的?是吧,在这编个号就行了。这个软件工程设计模式大家要明白,它的英文写法叫design pattern。那么它是针对什么呢?普遍存在的,反复出现的这个问题提出的一种解决方案,这个就叫设计模式,那么它在1990年由建筑设计领域引入到。计算机科学的。对,好,这里面我们举了一个例子,就是大厦和简易房,大厦我们需要设计,简易房不需要,对不对,不需要OK,那紧接着我们又说到在实际工作中我们可能会遇到的跟我们这个设计模式相关的一些问题,比如说。
18:00
你在11。这个工作中,项目开发完了过后,客户提出新的功能。那这个时候我们就要保证我们项目的什么呢?可扩展性。可扩展性,而这个可扩展性呢,正是我们设计模式要解决的主要问题,也就是说你用了设计模式,你的扩展性就会变得很好。我我这总结一句话啊,OK,使用了使用了设计模式。设计。设计模式具有程序,我们会叫软件吧,具有。就具有什么呢?具有很好的扩展性。后面呢,还会反复的说这个事儿,再比如说我们接手一个项目,我们需要有很好的维护性,设计模式也能让我们有很好的维护性。还有呢,就是我们在面试的过程中,我们面试官基本上会围围绕三个问题展开,哪三个问题大家可以看到我这标一标,他会问你用过什么设计模式,怎么用的。
19:07
解决了什么问题?对吧,那么这个讲完了过后,我也给他说了一下软件这个设计模式在我们软件中到底哪个地方用到呢?我总结了有两点可能会用到,第一个就是在功能模块中,你就会使用到设计模式加算法,大家知道设计模式加算法呢,就能把我们功能搞定了,然后呢,在框架里面呢,就是多种设计模式都会出现,你比如说像my BAT spring spring mvc,它用的设计模式可能就是好几种。对不对,他不后面你们再再看源码的时候,会看到这么一个特点,那么在架构这一层呢,就是我们,呃,在框架这一层呢,就是我们架构。对吧,当然架构既然是有框架构成,里面也会用到设计模式。最后我总结了一点,如果你要成为一个真正的合格的工程师,就你要站在工程师的角度来看,你需要学一下设计模式。
20:02
好,这个就是我们这整理的这么一个过程,诶,我看这标题是不是有点小问题,好这设计模式的。面试题啊,面试题这个地方呢,我把这个也标一个三号吧,好这样好看一点对吧。面试题就不能要了,那这样做我重新来给大家来一个这个箭头,这是第一个面试题。哦,这个题我们这就不要了,因为这也是一个题嘛,我在这呢,给它来一个这个箭头表示是一个面试题,对吧,这也是个面试题。这是面试,我就不写了,检视器模式也是面试T,那就不标号了,不标号了。对吧,这样看起来比较清晰一点,不标号。不标号这边呢,我们给它来一个我的正文。啊,这样它就不标号就完了,不标号呢,给他来一个这个镜头。好的,诶,这个地方是怎么回事,这个地方删掉。
21:00
啊,我删掉,好,这是解释器模式的一个题。单利模式,单利模式我们也不要标号了,因为为什么呢?因为它只是一个,呃,它只是一个面试题,并不是一个章节,我把它去一下。用一个箭头啊,这样看起来就清晰,最后单立模式有八种写法,移到这最后,这是设计模式的重要性。好,关于笔记呢,我们先整理到这里,然后下边呢,我们来接着讲下面的内容。
我来说两句