00:00
我们把单利模式讲解的内容呢,做一个小结哈,就是我们讲了哪些内容,我们简单的回顾一下。简单的回顾一下。单利模式呢?我们是怎么来给大家介绍的呢?来走一个。走一个往这儿走哈。啊,不是这个地方。在以前那个笔记好,我们往下看一下。在这儿。我再捋一捋单立模式来插入一个分页。这讲的是单力设计模式,单例设计模式。对,单例设计模式第五章,那单立模式呢?首先我们先给同学们做了一下介绍,就是何为单立模式。这样子说的是吧,那单立模式呢,我这总结了这么一个这么一句话,什么呢?就是所谓单利模式,就是采用一定的方法。一定的方法保证在整个软件系统里面,某个类的是某个类只能存在一个对象实例。
01:05
啊,这个就是单利模式要完成的问题。解决的问题,那呃,它一共有几种写法呢?我们这捋出来它有八种写法。哪八种写法呢,我们就依次展开讲解的,对吧,哪八种就这八种,我们捋到这儿。那这里面我标红的地方,同学们可以看到标红的就是后面我们推荐大家使用的,像这二汉式是可以用的。二汉斯是可用的,推荐使用的是这么几个。后面这三种。是不是后面这三种呢,我们推荐使用,那二汉式呢,也是可以用哈,就是说如果你能够确定你这一个单利模式一定会。用到一次,那么二汉式是没有问题的,所以说二汉式呢,我们也是在开发中也是经常会使用到的,但懒汉式同学们要小心啊,懒汉式呢,它这个呃,如果你不小心的话,它会出现这种安全线程安全的问题。
02:05
这是这么八,呃,这个单利模式的八种方式的一个说法,紧接着呢,我们先讲的是二汉式的第一种。什么呢?就诶这个地方我们要把它换一个颜色了,对吧,第一种,这第一种呢,就是我们所说的。诶,这个地方我们应该用标题二比较好。对吧,汉斯那二汉室,它这有应应用案例,也有它实现的步骤。好,这个地方我要稍微的整理一下,因为它这个颜色哈,没有改过来。我们首先把它切成。这个我的正文对吧,我的正文,然后呢,这就没问题了啊,这就没问题了,粘过来就行。方案424的,它的一个具体的实现步骤呢,有这么四部曲。四部去,然后我们把代码给它放过来就可以了,怎么实现的来走第一个就是TYPE1。
03:05
这是我们的第一种二汉式,使用静态变量来实现的二汉式的写法。小心别人问道,然后第,然后第二一种单利啊,这个单利模式呢,我们用的是。啊啊对,还对他做了一个优缺点的分析,我们也把这个笔记呢捋到这里来,对吧,我们做了优缺点的一个分析。就是第一种方法呢,它有什么优点,它有什么缺点,我们也做了一个分析。到这里来。好,那这呢,我们这加一个这个符号把它隔开哈,隔开重新来一下。好,这样它就变号了,然后接着呢,我们又给大家讲了二汉式的静态代码块的写法。捋捋思路,同学们捋捋思路,那这个静态代码块的写法呢,其实它就是在原先这个代码上做了一个改进,也就是说把实现这一个单例对象呢,是放在静态代码块的,但本质并没有什么太多的变化,是不是?所以说这块代码演示呢,我们就写到这就可以了。
04:18
就是我们的第二种方式,开班。把他的相关的代码拿过来。把相关的代码拿过来放,这就可以。OK,然后呢,我们对这第二种。二汉式呢,我们也做了优缺点的一个说明,对吧,优缺点的说明同样给他来一个小箭头。这边呢,我们分析一下。好说了,这种单力模式呢,如果你没有用,你创建好了没用,那就造成内存浪费,如果用了那就没什么事。好,这是我们的第二一种方式,第三种。第三种呢,是懒汉式的三种写法。
05:00
第一种是线程不安全的写法。那现在不安全的写法呢,我们是这样写的,先写了个代码。代码演示对吧,我们先把代码拿出来给大家看一下。也就是我们的第三种写法。这种写法我们来,我们写完了过后,我们做了一个分析,它的问题是在什么呢?大家看它的问题是在于就是如果说有多个线程执行到if语句块,有可能造成创建多个instance,所以说这个呢,它是有问题的,它是有问题,它的问题在什么地方,我们做做了一个分析。对它的优点和缺点,我们做了一个分析。对,好,OK放到这。它的优点呢,它的优点我们这儿可以看出来,它是能够实现懒加载的,因为你用到的时候你才去创建实力,但是呢,它有可能产生多个实例。所以这个地方呢,它是很危险,因此在实际开开放中,我们不推荐使用就不要使用就完事了。
06:01
这是懒汉式的第一种写法。那懒汉式我们又讲了,既然你有这个问题,我们就用了一个同步机制来解决,就是懒汉式的第二种写法。对,那哪怕是第二种写法呢,我们这儿也有代码来进行演示。对吧,那看第二种写法是怎么来改进的呢,就是我们太四。它的改进方案是如此这般的。来看一下。哪里就是他在这一个get instance里面呢,它呃,这个方法呢,它加了一个同步。加完这个同步,的确它可以解决一个线程安全的问题,但是性能变低了,为什么呢?因为你第一次会去同步,你以后是不是还要继续同步啊,所以说这个呢,它的效率是比较低的,因此我们也不推荐使用。最后我们分析了一下他的问题。对吧,他的问题在哪里,我们整理一下优缺点我们整理一下。
07:03
它的优点。很明显就是解决了线程安全的问题。解决现场安全安全问题。缺点是同步,就是他后面要得到这个实例呢,本身直接就可以了,但是他没有做这个东西,所以方法呢,总是要同步的效率太低。所以说最后我们说不推荐这种写法。不推荐这个写法就完事了。OK,那第五一种,第五一种这个叫线程安全,但是他把这个同步的方式放在代码块这了,这个呢,我们也分析了,不要去使用,对吧,因为这个其实他们。他都达不到一个线程解决线程安全的问题,所以这种写法呢,咱们就嗯,肯定不会去用它了,只是我列到这里来。好的,那这个呢,我们就直接把这代码放出来就可以了,好吧,把代码放这这个就不推荐就行了,不推荐。不推荐。
08:01
不推荐使用。好。这个我们就过啊,紧接着我们又讲了什么呢?我们又讲了双重检查。双重检查呢,它也是用来实现我们这个单例模式的,那那么我们来看一下它的代码是怎么实现的。代码是怎么实现的,来看一下代码是在哪里,是在TYPE6,它代码呢,其实这加了一个if,在同步代码框里面又有一个if,好,这样呢,它就能够保证进行双重检查,既解决了现场安全,又解决解决了懒加载所这个方式呢是我们推荐使用的。我把这儿。放进去。好了,呃,那这边呢,也做了一个优缺点的一个分析。对吧,对他的优点和缺点,我们也做了一个分析。好,往这儿放一下就可以。来,走一个,给它来一个小的箭头。OK。最后我们得出的结论哈,得出的结论是推荐使用这种方式来实现单利模式,为什么呢?因为它。
09:07
可以实现延时加载效率也是很高的,同时呢,线程也是安全的。所以这个还是比较完美了,相对来说比较好。那单利也就是说这个我们所说的双重检查网络功能,还有一种方式实现我们的单利模式叫做静态类不类的方式。那静态内部类方式呢,我们也先走的是代码,对吧,我们来一个代码演示。那代码是怎么来实现的?打开我们的第七种写法。第七种写法。第七种写法呢,它是这样子的,他把这这个地方是它的核心。就这一块是我们静态内部类去实现单利模式的核心,它利用了静态内部类的特点。来完成的。静态内部类的特点是你加载外部的这个类的时候,它不会自动加载。
10:00
当你用到这个时候,用到我们这一个静态内部类的实例的,呃,这个静态实例的时候,它才会去加载这个类,而且在加载的时候呢,它保证限制这一段代码是线程安全的,因此呢,它既可以实现难加载,又可以保证我们的线程安全,所以说这种方法呢,也是我们推荐的。好,最后我们这儿仍然做了一个优缺点的说明。对吧,我们也做了一个优缺点的说明,来整理一下。那这种方式,诶,我们在这儿整理一下。这种方式我们最终是结论是推荐使用。推荐使用一样,它的优点是避免线程不安全。而且呢,利用静态内部类的特点呢,实现了延时加载效率也是很高的。推荐使用。这是第七种写法,还有一种呢,就是枚举。枚举啊枚举呢,也是我们推荐大家使用的,对不对,那怎么用的呢?来看一下代码。
11:00
代码呢,是在这个位置,我们第八种写法。小段叫做代码演示。代码演示。好的。那具体来说这段代码呢,就在这个地方写出来的。那这边呢,我们也对它做了一个优缺点的说明,对不对,优缺点的说明来。给他来一个小箭头板书三点。三点,哪三点就在这,那么它能够避免多线程的安全问题,而且还可以防止反序列化重新创建对象,因此在这个effective Java里面呢,它是提倡我们使用的。那当然最后结论是推荐使用。推荐使用好同学们,那关于最后还有一点啊,JDK呢,我们我们Java呢,呃,如果面试官问到问到什么单利模式在JDK哪个地方用到了,你要回答它在哪里呢?在我们JDK里面的runtime类就用到了单利模式,而且这边用的是懒函式。
12:07
是不懒还是?啊,而是二汉式二汉市。二汉式,好,这张代码呢,我们也把它拿过来。是不是这段代码呢,我们这做了一点小小的分析。小小的分析。好,这是两点。这是两点,最后源码的分析就是这个图就OK了。对吧,就这个图就OK了,这个图呢,已经把它的一个使用说出来了,这里留了一个,然后呢,有个静态方法返回我们创建好的car current runtime,最后它的构造器被私有化了,符合我们。二汉式单利模式的特点。最后呢,我们还对单利模式的使用细节做了一些必要的说明,是在这是吧。做了一些必要说明,来看一下。OK,那单利模式。
13:00
它的细节呢,我们一共整理了有这么四点,就一个念了重点强调一点在什么呢?使用场景。使用场景就是在需,在这个需要。需要这个频繁创建和销毁的时候,我们可以用它,这是第一个,第二个创建的这个对象呢,它是个重量级的。而且创建创建完了过后呢,我们就经常用到,就可以用它,还有一种什么呢?工具类,频繁访问的数据工具类也可以考虑使用我们的单利模式,还有就是像数据源session工厂也可以考虑使用我们的单利模式,好同学们,那关于单的模式我就说到这儿,大家听这个单利模式呢,感觉有点什么呢,有点有点繁琐,因为他有八种写法,我都给他介绍了。对,嗯,其他的这个模式没有这么多写法,就单利模式比较特别,因为单利模式呢,它比较简单,也就是在面试的时候,其实它出现的概率还是比较高的,因此我讲的比较细了一点啊,讲的细了,但是难度其实单利模式的难度并不大,对吧?OK,那关于单例设计模式呢,就给同学们讲到这里。
我来说两句