00:00
通过静态内部类呢,我们也可以实现单例模式,那么我们来先看一下这段代码。那这段代码它是怎么来完成的呢?大家看静态类部类,同学们首先要对静态内部类的特点有一些了解。大家知道静态内部类有什么特点啊?第一个特点是。就是当我们这个single to进行内装载的时候,我们这个静态内部类它是不会被装载的,这个大家应该要清晰。这是第一点。第一点。第二点呢,就是当我们去调用新痛的get instance方法,用到了新痛里面的这个instance。静态变量的时候呢,会导致我们这个静态内会被装载,而且大家都知道,当内装载的时候呢,线程是安全的。说说静态内部类,其实说说白了有两个特点,哪两个特点呢?第一个特点,第一个特点是。
01:06
当我们它它外部这个内被装载的时候,静态内部类并不会立即被装载,这是第一个特点,第二个特点,当我们静态类内部类在在调用这个get instance方法的时候呢,会导致静态内部类的装载,而且只会装载一次,而且在装载的时候呢。这一个线程是安全的,因此它不会有安全性的问题。所以说通过静态内部呢,它既可以达到一个懒加载的效果,同时也能保证我们什么呀,保证我们线程的安全,所以说静态类不类呢,也是一个非常好的实现单利模式的一种方式,来同学们,我们把代码给大家实现一把。现在呢,我们来写这么一段代码。好的,这是我们的type几呢?TYPE7第七个案例。
02:04
第七个案例,OK,呃,还是老规矩,我们把这个代码呢粘贴复制一份。粘贴复制一份改一下,这是第七个第七种方式,好吧,我们改一下,这叫什么呢?使用。是由静态内部类完成单利模式。OK,单利。单利模式。OK,好,我们来稍微改一改,现在这边我们应该怎么改呢?这个就是我们静态内部类。静态内部类完成的。完成,OK。呃,我们来做相应的改变吧,首先这个动作还是要有的,就是它的构造器私有化。私有化这个不,嗯,没有,没有任何问题,还应该这样做,下边这个地方我们要改了,他仍然提供啊,我们这要写这么一个东西了。写一段什么呢?来写在这写啊啊写一个写一个静态内部类,静态内部类。
03:08
该类该类中该类中有什么呢?有一个静态的属性。OK,那这个静态属性它的类型呢,就是sing。这样就OK了,那大家看我的代码怎么写哈,Private private static class。那我就single。因式吞噬。假设我们有这么一个类。那在这里面我怎么写呢?我这样写,Private private static。Final final呢,可以在底层进行一个优化,这个同学们以前是学过的啊,Single。Top。写到这里面,然后呢,写个instance instance。Instance。啊,因是ta instance等于六新。
04:06
好,这样就搞定。大家看到,那我在用的时候,我怎么用呢?好,下面我们仍然提供一个这个方法,就直接这个返回,返回的时候通过我们的静态内部类来直接返回它的这个静态属性,那这提供的静态公有方法直接返回什么呢?直接返回我们这个类这个。成员变量就可以了。大家看到这一段代码有什么好处,我再说一遍,呃,就说这个静态内部类说的就是他。Single通instance,它呢,在你single痛进行这个类装载的时候,它并不会马上执行它,也就它不会导致这个类类静态内部类的这个装载,从而呢保证我们懒加载是可以用的,第二点,当我们调用这个get instance的时候,它会去取这个静态内部类里面的这个静态属性,这个时候会导致我们。
05:06
Single to instance这个静态内部类装载,而在装载这个类的时候,大家知道JVMG在装载类的时候呢,它是线程安全的,所以说我们在这里使用了JVM底层提供的这个类的装载机制,保证了这个初始化是线程安全的。因此静态内部呢,是我们推荐使用的,推荐使用。推荐使用,好同学们,那么我们来运行一下看看对不对,跑一个代码。好,这个地方好像这边没有改名,是不是我把这边的名字改成对应的一个七。OK了。那各位朋友,我们运行之。我们运行运行起来过后呢,发现没有任何问题,仍然是可以的。好,我们对他的优点和缺点再做一个简单的呃说明来看这里。这种方式采用了类装载的机制来保证初始化实例,只有初始化实例的时候就是只有一个线程,为什么呢?因为内装载它这种是线程安全的。
06:07
静态内部类方式在single痛内被装载的时候并不会立即被实体化。就是刚才我说的single to这个类被装载不会导致静态内部类被装载,而是在需要实例化时,调用get instance方法才会装载我们的single to instance这类,也就是我们那个静态内部类,从而完成single to的实体化,因为它里面有一个single single to的一个静态变量,对不对?还有第三点,类的静态属性,注意听这句话,类的静态属性只会在第一次加载类的时候初始化,所以JVMG就帮助我们保证了线程的安全。为什么呢?因为我们知道在装载内的时候是线程安全的。OK,因为在内进行初始化的时候,别的线程无法进入。无法进入,所以说我们利用了静态内部的两个特点,两个特点第一个就是你外部内的装载不会导致静态内部类的装载,从而保证了什么呀,保证了它的懒加载,第二点,当我们加载这个静态内部类的时候,我们才去实例化,深透这个对象实例,而在装载这个类的时候呢,线程是安全的,别的线程无法进入,保证了什么?保证了线程安全,两点都能够得到保证,因此我们说优点它避免了。
07:26
线程的不安全,利用静态内部的呢,还实现了延迟加载,效率比较高,所以说最后结论推荐使用。推荐使用好,同学们,这个就是我们静态内部类,就是单类模式的第几种实验方式呢?第七种实验方式就是静态内部的实验方式,我们就说到这里,大家看这个是推荐的啊,同学们这个是推荐的OK。关于静态类不类实现单利模式,就给大家聊到这里。
我来说两句