00:00
同学们好,从今天开始呢,给大家讲解一个新的课程,课程的名字叫图解Java设计模式。那首先呢,我们来看一下这个标题,首先我们讲的内容,内容呢是设计模式,就是跟设计模式相关的内容,第二个呢,我们是用Java语言来讲这个设计模式的,大家都知道啊。设计模式呢,本身它是不依赖于某某语言的,但是呢,在具体讲的时候,我们还是要选一个语言,仍然选目前最流行的Java语言。讲课的方式呢,仍然按照图解的方式来讲解,各位大家都知道设计模式在我们实际开发中其实是非常重要的,但是因为设计模式它里面包含了大量的编程思想,所以说听起来呢,有些同学会感觉到有点无云里雾里的感觉,就是感觉好像有点抓不住那种感觉,所以说呢,这次我们选用图解的方式来为大家进行介绍。
01:04
好的,那还是老规矩,我们简单来看一下我们这一个课程包含的一个目录结构。首先呢,第一个仍然是放我们的笔记。当我们把整个课程讲完了过后,笔记会放在这里,会形成一个文档代码,每一天的代码呢,我们会放在这个文件夹里边,OK,课件放在这里的,包括我们的PPT,包括我们的图解等等。视频,每天视频呢,我们会放在这个文件夹,资料放在这个文件夹,也就是说在我们讲课的过程中,如果需要一些资料,比如说插件啊,或者文档啊,参考的文献啊等等,我们就会放在这个文件夹,大家明白。好了,目录说完了过后呢,我们就直接切入到我们这个课程。来,同学们先来看一看吧。首先呢,我们要给大家介绍一下我们这一个Java设计模式的内容,以及我们授课的一个方式。
02:07
呃,把内容介绍完了过后呢,你大体知道老师要给大家讲哪一方面的内容,就是包括什么东西,如果说有一些内容你已经比较熟悉了,你可以把那一块你熟悉的跳过,如果说有一块内容你一点都还不知道,那你就认认真真按照老师讲课的顺序一点一点的听,这样呢,你去你会循序渐进,把所有东西都掌握到手。OK,那么授课方式呢,主要是跟大家达成一种一种这个,呃,就是什么呢?认同,就是你知道老师在讲课的时候是按什么方式来讲的,这样利于你的消化和吸收,OK,好,那我们先来看。我们先来看设计模式内容介绍的第一个部分,什么呢?先有几个经典的面试题,引起大家对这个设计模式的思考,同时呢,也是提高大家对设计模式的学习的一种兴趣。
03:06
我们先来看这样一个面试题,是跟设计模式相关的,他问的问题是原型设计模式的一个问题,里面呢涉及到三个点,第一个他要求我们的面试者用UML类图画出原型模式的核心角色。或者叫角色,那么同学们可以看到这里面呢,第一个叫UML类图,你学过没有,如果你学过你就知道,诶这个类图呢,它是怎么回事,如果你没有学习过呢?没有关系,老师到时间会跟他讲一下,这个类图就是我们对象与对象之间存在的有哪些关系,比如说泛化呀,实现呢,依赖呀,和这个组合呀,还有这个聚合呀,对不对,这样一些关系呢,我们都会讲到。如果你已经知道了当然这块,你可以可以跳过这块直接进入到设计模式。
04:02
那个章节明白好,那么UML类图你要画的出来,首先你要懂UML类图,这个图呢,它主要是描述类与类之间的关系的。然后呢,他要求你分析出原型模式的核心角色,那就意味着你至少对原型模式要有了解,也就是说你在开发中用过它,你才能分析出它有哪些角色明白好,然后他第二个问题要求大家用原型设计模式的深拷贝和浅拷贝是什么问的这个问题,并且写出深拷贝的两种源码方式,第一种呢,是从写克隆的方法实现深深拷贝,第二种呢,是用序列化的方式来实现深拷贝。那你如果这个地方你对生拷贝没有理解,OK,那你这个题肯定是做不出来的。而且你还必须要会两种方式,所以说你看他考的这个考察点呢,还是比较深入的,我们再来看第三一个,第三个问的问题呢,就更加深入了,因为目前来讲,面试官他希望你是有实际开发经验的,所以他问的呢往往是源码级别的。
05:12
所以他直接问,他说spring框架中哪里用到了原型模式,要求你对源码进行分析。那也就是说你如果用过spring框架。那么他就要求你去分析源码,当然有同学说了,说老师我没有学过spring框架怎么办呢?没有关系,如果说我们在正在听老师讲课的同学,你你没有学过这个spring框架,当然这个情况比较少,一般一程序员都学嘛,对吧,如果你确实没有听,没有学过呢,也没有关系,因为我在这源码分析的时候呢,其实主要是把他这个设计模式那一个核心拎出来,让大家看到这个这个价,它的这个股架是怎么回事儿,所以你仍然听得懂,但前提你要懂Java啊。说老师我不懂Java语言,能不能听懂,那这个听起来有点吃力,明白吧,最好是你学过Java的,那么我们来看一下,如果学过spring。
06:06
这个框架的同学都知道,在我们这个并插文件里面呢,有这么一个。配置OK,那这个配置干什么呢?大家看这有个class,这个class呢,让你指定一个类,然后这个scope范围里面写了一个pro type,这个就叫原型理解,那么他要求你去分析,就是这一个配置,在我们spring框架进行这个处理的时候,它的源码对应的是哪一段。你看你能不能分析出来,因为这里面涉及到就是一个模式了,就是我们所说的原型模式,OK,那同学们可以简单先看一下啊,呃,也就是说我在讲课的时候呢,我这些都会给大家讲,比如说如果你要分析的话,大家看。在spring中,原型B的创建就用的是原型模式,你要准确的告诉你的面试官。然后呢,你要对代码进行分析,并且要对代码进行这个debug,你比如说诶,你会讲到你会告诉面试官说,对于这样一个配置,在我们这一个源码里面呢,会对应哪一块呢,大家看一。
07:13
二三我全部找到,最后当你堆追这个源码的时候,最终会追到一个叫get b的这么一个方法。OK,那么这个方法里边呢,有一个方法叫do get b,就是这个方法,同学们看do get b,这个do get b里边呢,往这里面追,里面有一个判断,就是如果if m bd.is看到没有is prototype,那么我就怎么去创建。只要你把这个点答上来了,那面试官就可以判定说你对这个原型模式还是比较了解的,因为你已经从源码级别进行分析了吗?也就是说同学们透过老师这个讲解,你应该理解到这么一点,就说现在呢,面试官问的不再是那么抽象的东西,他希望你是真正在实际开发中用过的,或者说你在框架里面能够。
08:08
分析出这个模式在哪里用,所以要求还是比较高,而我们这个课程呢,也是基于源码,源码这个级别来讲解的,OK,这是第一个。经典的面试题,我们紧接着再来往下看。那么我们再来看一个,也是一个关于设计模式的经典面试题,什么呢?他说设计模式的七大原则是什么?七大原则是什么?有些书上呢,写的是六大原则。就是最后有一个叫做组合,呃,复复用组合原则,有些书生他没有拎出来,我这是单拎出来的,叫七大原则,那七大原则呢,他要求我们回答七大设计原则的核心思想是什么,也就是说你要把它七大就是我们我们设计模式的七个原则,它的核心思想。表达上来,第二个能够以类图看到没有又出现类图了。
09:02
能够以内图来说明设计原则是怎么样子的,就用内图把它画出来。第三一个更重要了,他说,他说请问在你实际的开发中,你在哪里使用到的OCP原则?那么OCP原则呢?稍微懂一点同学就知道,就是开辟原则,但是人家不仅仅让你停留在一个概念上,而是要实打实的说你怎么用的,OK,同学们来看。同学们啊,我就是现在先说的面试题呢,只是引起大家一个思考,明白,我们后面都会详细的介绍,你现在听不懂是正常的,因为我还没有讲呢,只是告诉大家。这个设计模式它在面试中可能会问到,那么我看有哪七大原则呢?设计模式中常用的七大原则有,单一、职责、接口、隔离、依赖、倒转,你是替换,开闭就是这个开闭就是同学们刚才听到的OCP原则。
10:01
明白,然后呢,有。迪米特法则,还有复合成复用原则,这个第七个这个原则呢,有些书上没有单独的写出来。没有单独出来,他就直接写,写了前六个,我把它单独说了一下,因为我觉得合成复用原则其实是非常重要的,所以说我把它单独写出来的明白好,那么他又说OCP原则在哪里用到呢?其实在我们的工厂模式里面,其实就用到了OCP原则,我们就把这个类图给大家看看,大家看这是类图,后面我们在讲的时候会告诉大家这个类图是怎么画出来的,所以大家不要着急。因为这个课程呢,是一点一点给大家带过来的,明白吧,好,这就是我们经典面试题的两个,那么后面还有待会儿我们再介绍同学们可以看到,也就是说从目前来讲呢,别人问的设计模式都是问的比较核心的。他就是来考察你有没有实际的开发经验,能不能灵活的运用设计模式来解决我们开发的实际问题,好,这是关于两个呃,经典的设计模式面试题的一个讲解。
11:08
好,这一讲我们先简单说到这儿,待会儿呢,我们继续介绍。
我来说两句