00:00
一下讲完。好,我们来看一下,那下面呢,我们来看一下单例模式。那单利模式呢,虽然前面讲过,但是呢,我还要在这儿多说两句啊,干脆这样子,我们呃,我们这个加点加点课吧,把那个装饰讲完好吧,把那装饰讲完。大家有事情吗,今天。啊,可能有些人有事情还还是还是下次课讲吧,不要拖堂,拖堂是一个特别不好的习惯啊,我不拖堂啊,啊好,我们看一下单利模式,简单聊两句,单利,单利模式呢?把这讲完,把单利模式讲完,单利模式指的是什么呢?它是保证整个软件系统中某个类只能存在一种对象实例。那么它的应用场景最经典的就是像这个habit里面的c factory,同学们学过这个呢就知道,再比如说我们今天学的阿卡。诶阿卡里面呢,它有一个这个叫做actor啊,System这个呢,它底层也是用的这个单例,诶因为这个I system对象不能有多个,你多个没也一是没有意义,第二个呢,它是很重量级的,所以说这个在我们实际开发应用呢,这种单利模式也是存在的。
01:19
啊,存在的,那么单利模式呢,在这里看中,因为没有静态的概念呢,所以为了实现Java中单立的效果呢,直接写在这个类对象中就可以构建单立对象,那么准确的讲有两种形式,我以前没有单独说出来,第一种叫满汉式,第二种呢叫做二汉式。啊,二汉式它就真的实现二汉式了,我以前给的这个幻灯片有点出入啊,二汉式底层它真的是二汉式,那么这个懒汉式呢,底层真的是懒汉式,这样子我就快速的把这两个案例给大家跑一下,因为代码呢没有什么难度。好,同学们,我呢,给大家新建一个包。
02:01
好的,那这个包呢,我我新建一个包,我们就取一个叫做single。啊single啊,就单立啊单立single痛,有人可能叫single痛,好,直接写到这里。好,然后呢,我们快速的来写两个案例吧,第一个案例就就我看一下这个名字叫什么比较合适啊。啊叫test single啊,第一个啊,我们写一下这个test single。好,来走第一个案例,开始single,写一个scan,然后呢,它是一个object。好这个地方,那现在呢,我们为了这个,呃,时间的这个保证啊,我们快速的写一下来走一个吧。好,我现在要把谁做成一个单例呢?大家看我要把这个single做成一个单例,好我这就不多说了,看这里代码执行一下,大家看例我这是怎么写的啊,这里首先我我现在主要是想对谁近视的话,我要让这个single to。
03:00
只能有一个。是这个类型的啊,也就是说我要保证single痛这个类的,它的实力只能有一个。啊,不是控制它。这个这个东西在底层,人家对应的类是这个类。它对应的是。Dollar这个啊,是两回两回事啊啊,所以大家不要给他记记混淆了,我要控制它,所以说我先将其私有化。私有化,然后呢,这个地方怎么做呢?我先做了一个私有的一个VR变量,但是这个你做成这个VL也是可以的啊,但不行了,这个还不行,你这个这个现在用的是什么式呢?我们现在用的是这个叫做懒懒汉式,懒汉式没办法懒汉式。懒汉,懒汉式呢是呃,我先去获取,如果发现你等于等于空,我再给你创建,然后再返回,这是懒汉式来用一下就可以了。好,这个现在用的是奶函式啊,同学们给大家玩一把,那么现在呢,我用s to。
04:00
啊呃,点get instance好,我随便返回一个变量,就instance这个,比如说是一吧,然后呢,我们再创建一个single通,点get instance,还来一个变量VR好INSTANCE2,比如说是这个地方它没有变诶。这样子啊,我就干脆复制一下就可以了。不要这个。复制一下,大家看一下这个区别二。那我们来比较一下这两个实例是不是相等的啊,INSTANCE1是否等于INSTANCE2呢?好,肯定是相等的啊,我们这说出一句话。现在。相等,好,我们来执行一下。好,当我们六二年得到两次,其实你们发现呢,的确它们是相等,说明它是同一个对象,因此这就实现了单立,主要看下底层。因为我说这是懒汉式,我们来怎么证明它是懒汉式呢?看底层代码。看底层。好,看一下底层代码呢,我们打开它的这个反编译工具。
05:04
啊,然后呢,在这里我们写上,诶我们在这里啊,这找了半天又跑别的地儿去了,然后呢,我们是在啊这个C盘啊MIS。是这个位置,呃。Idea好进到我们的JAVA0705 target class com进到我们的七,现在是single,好打开它看一下就可以了,同学们看这底层呢,你们看它这里其实我们的单利指的是它。啊,而且大家可以看到它在这里底层并不是一个静态的了,那他怎么实现这个呢?因为它在整个过程中,这个sta提格只有一个,你看怎么做的,当我们去get一个instance时候,他先判断他用这个S。这个方法去获取这个东西,这个东西不就它吗?啊,如果说为空,我就留一个如果,嗯,如果不为空呢,就直接返回,说明这个的的确确就是我们以前传统Java里面的恶汉啊,这就是这这这懒汉懒汉懒汉啊,这写错了怎么还写的,诶这个地方怎么写真呢。
06:15
啊,是写的是懒汉啊,我我还写,写错了,还以为好这是懒汉式,大家看的确如此,所以说把这段核心代码呢,给同学们拿过来。啊,证明他的确是这个我们所说的这个懒汉式可以了。好,我们再来看一个案例,这个呢,我们测试它是一个什么呢?就是二汉式,我看二汉式是怎么写的啊,Test第一个single。啊,痛二吧。2OK,好,给他写一段代码,那这段代码呢,我们也其实就是在这个基础上稍微的改进一下就可以了,我就从这复制一份过来。好,你看一下这个怎么改进啊,同学们。啊。
07:01
非常的简单啊,比如说现在呢,我们这个single我也改成二,不然的话这个就对应不上,首先也要私有化,然现在我用的是二汉式。啊,恶汉。那么二汉市它的底层肯定跟这个不一样,那怎么做的呢?Single or2好,它是这样子的啊,这不要这句话了。这句话也不要了,他怎么办?直接就拿一个六啊,直接就搞一个出来,那六一个什么呢?啊,六一个SINGLE2,诶你看这就完事了啊,看看这是怎么又报错啊。少一个括号是吧。诶不对呀,哦,Single啊,对这个类型不是不匹配啊,这个匹配匹配的问题啊,呃,因为我刚才这个是变SINGLE2,你你你不能把升格二交给升格吗?那肯定不匹配,好这方返回也很简单,就一句话返回就完事了,你要什么就给你,因为你没有别的机会,因为这是私有,那这个地方我甚至可以改成L。
08:01
啊,就更好了。因为我在这次二汉市我再上来过,给你实例化好同学们,我们把这个呢代码也给他跑一下。然后跑的时候呢,跟前面那个一样,我就我复制一份啊,懒得写了,把这个拿过来,拿过来过后呢,往这儿粘一下,把这个地方改一下啊,就是二。这边也是二。好,我们为了以示区别呢,加两个波浪号,先同学们看一下代码能不能能不能就是相等啊,各位同学运行一下,好,当我们运行过后呢,我们发现这个代码返回的仍然是相等的,好看一下底层,看一下底层怎么证明它是一个呃二汉式好的打开它,打开它以后呢,我们找到single哦single to2好,我们看代码是怎么做,同学们看。呃,同学们看这里它在这个地方,呃,构建的时候,你看首先把这个某点出来,同时就直接执行了一个Z,所以说它在get之后呢,它直接S这个S从这它没有丢了啊看直接调S的这个方法返回z.S而这个z.S呢,在你这个实例化的时候,它就已经给你搞出来了,好好搞出来了,所以它这个地方它就没有说,诶先判断是不是为空,我才充建,其实就直接给你弄出来了啊,那这这个地方是这么一个逻辑,把这话粘过来。
09:28
啊,这地方它是没有再有六的,没有刚才那个呃,判断的那个逻辑了。好,所以说看这个底层比较一下啊,看这是直接返回,因为你事先已经创建好了,而我们这个,呃,这个懒汉式呢,是先判断为被空,然后再去创建啊,逻辑还是有区别的,好同学们,那关于我们这个懒汉和恶汉呢,我们就先聊到这里,给大家进行一个简单的板书啊,刚才我们讲了一个什么呢。好的,刚才我们讲了一下单例模式的两种形式,对吧。
10:04
诶,给他来个标题,我先。给大家简单的把这个单利模式的几点说明拿过来好,首先说了一下什么是单利模式。对,什么是单利模式?单利模式的应用场景。对应用场景标题三,比如像阿卡里面也用到了,那这个单利模式完了过后呢,我们就给大家举了这个两个案例,对吧,一个是南汉,一个是鄂鄂汉式好,这样呢,我就快速的给大家整理一下,非常简单,代码好写一下。好还是线啊,就是单力。单利模式,我们讲的是先是一个呃,懒汉式,懒汉式好标题三。标题上好,那么我把这个懒汉式呢,给大家复制过来啊,懒汉式给它复制过来,就是我们讲的懒汉式好,紧接着呢,又给同学们讲了一个单立模式的二汉式,单立模式的二汉二汉式好,这个呢也给同学们板书过来,A标题三。
11:16
对的,然后把这段代码对复制到我们的笔记中去。好,聊到这里。好,同学们,那关于我们这个懒汉和饿汉的这个单利模式呢,我们就先聊到这里。
我来说两句