00:00
静态这个是比较重要的,大家需要掌握,那么静态这块应用呢,咱们提到一个叫设计模式了,设计模式首先关于设计模式的一个理解。设设计模式找一下啊,在这呢,设计模式这个事呢,大家不用去死记硬背,你大概有一个这个概念就可以说呢,是在大量的实践的基础之上,总结和理论化之后,优选的代码结构,编成风格,以及呢解决问题的思考方式,这呢就是我们所谓的叫设计模式,理解一下就OK。这是第一个这个事儿,然后接下来这个设计模式的话呢,有哪些呢?这我们说呢,有好多把这个呢CTRLC暂时呢先粘过来,大家也是先了解一下就可以了,这个设计模式的话呢,通常我们说的话呢,都说是有23种啊叫经典的设计模式,这个设计模式呢,既然它是一个我们说叫优选的代码结构,编程风格,或者就是我们解决一些问题的套路。
01:06
啊,包括呢,像这个这个这个考研也好,或者高考也好,这个不知道你们现在还是不是流行这个话哈,比如说什么不会就选C还有吗?还有啊还有啊对三长一短选最短,是三短一长选最长是吧?啊就类似的这样的一些套路啊,就是这些东西吧,其实出题人他自己都没有感觉,就是属于你算那就人性了是吧,他自己这个没有没有感觉,然后通过这个大量的这个统计分析发现呢,还真是有这样的一个概率,就是当你确实不知道该选哪个的时候呢,按照他说的这个呢,那个概率呢,是稍微高一点点的,所以这就是统计学,统计学呢,你像这个呢,就为什么一开始说统计学呢,不认为是一门科学,就是你很难说出原因来,你说为什么散短一长我非要选最长呢,就是统计的规律,规律就这样,那我就这样去做是吧,哎,你很难说为什么,那因为你很难说出来是因为什么呀,对吧?哎,就这个意思。
02:07
那这呢,就我们叫做套路了,或者就是你解决这个问题的这一一种方式,像高中的时候学数学也讲过,什么叫直接代入法呀,什么图像法呀,哎,这个归纳法呀,是吧,都是各种各样的这个数学思想,那这个呢,其实也是大量总结出来的,你要放在我们程序里边,那也叫设计模式啊,就啊就这个意思了,那这个设计模式呢,有23种,就好比是呢,我们说总结出来了,说解决问题的话呢,一有23种方法,或者呢,23种数学思想啊,就这个意思,那么这个设计模式呢,一开始是谁总结出来呢,一开始确实还有几个人。有这么几个人,就是这几个人,四个人啊,这四个人的话呢,后来经常大家去网上看的话呢,就不提这里边每一个人了,因为每个人人名还都挺长,所以把他们四个人呢,就就用了一个词来表示,叫g of,叫g of four,就是咱们中文翻译成呢,不叫四人组了,更不能叫四人刚啊,一般呢,以后也叫四大金刚是吧,就这四个人,然后合起来这本书叫设计模式,他出来的还是比较早的,在九五年没记错啊,就写着了,九五年的时候呢,就把这本书写出来了,哎,大家也知道这个障碍语言呢,是不是也九五年的时候才刚刚开始起步是吧?诶所以说的话呢,你知道这个设计模式呢,不是说专专门针对咱们这个Java语言开始写的,只不过呢,这个设计模式后来的话呢,在咱们这个Java层面的应用起来比较多,比较丰富,体现的也比较多,所以后来的话呢,大家去网上你现在搜设计模式呢,很多或者绝大部分呢,都是用Java语言去来体现去实现的,就这样一个。
03:43
意思好,这呢就关于这个设计模式,这些设计模式呢,在现在的话呢,其实嗯,后来呢,他们几个人又有的就往里边又加过,就随着现在这个我们这个技术的不断去迭代,又出来出现一些很多新的这个情境,那又设计又又添加过其他的所谓的一些设计模式,但是呢,最经典的话呢,我们认为是23种,就是下边提到的这23种。
04:08
行,那么大家呢,目前处于这个初学的阶段,没有必要呢去把这里边每一种呢去研究清楚,就得像有点像这个数据结构,或者说这个叫GVM一样,等大家呢,把这个这个这个后边我们改相相应的这个框架呀,或者项目啊,诶你都做完了工作呢,也开始上手了,这个时候呢,你可以拿出一本数据结构来,拿出一本设计模式来整一本GM是吧,这块呢,去把这个知识呢去梳理梳理,再去加加这个内功,是这样子的啊,就刚开始学习的时候呢,没有必要一上来就去研究这个,行这呢就过了啊,这里边提到这个叫哎,Go of for。这呃,这个欧也大写吧,这四大金刚这四个人啊,然后下面的话呢,我们只讲了其中一个叫做单立模式,叫单立模式,首先单立模式你到底是要解决什么问题,就是每一种设计模式呢,都有一个它的一个目的就是你到底要干什么,解决什么问题,解决这种问题,你去找这种设计模式是这样子的,好这个单类模式。
05:11
单模式这个咱们在代码里边就有写了。所谓的单例模式呢,我们就是希望采用一定的方法呢,保证在整个软件系统当中,对某个类呢,只能存在一个对象,就是单例,单独的一个实例,这是它要解决的问题,行,那具体的代码实现,我们说了两种,这个恶函式一定要注意,这是饥饿的恶,不是那个凶恶的恶,所以写就写错了,懒汉是,然后我又不敢说太多,说太多了,反而这个老师说好像是不是那个是这个广西是这个事了,哎呀,还是就写成那个了,鄂汉市咱们呢,举例子是拿这个银行来说的,这呢叫一个恶汉市。CTRLC把这个粘过来就行,早上大家考的时候,考试的时候呢,这个不用写,这个不用写,这只是做了个测试而已。
06:11
这个呢,是咱们说的这个叫恶汉式,嗯,14吧,恶汉式,然后呢,我们又讲了一个叫懒汉式,懒是呢,我拿这个order来说的。CTRLC恶汉石和懒是从这个代码层面的主要区别,大家只需要看一个位置,看哪是不是就看这啊对,看那个对象有没有一开始的时候呢,造好了,造好了,那这就是一个恶寒式,没有造这种有拖延症的是吧?诶就是属于这种懒焊式的这种模式了,但是这呢,从我们代码层面说说这个一开始拖着不去造这个其实还是挺节节省内存的,诶用的时候呢,我再给你加载还算成个好事了,成了好这呢是我们说的这两种模式,这两种模式有了以后呢,我我再写一个,诶说不就两个吗,那确实还是这两个中的一个,但是呢,长得稍微有点不一样了,大家看这个呢,应该是哪种,我就暂时的,哎,我放这让你误以为好像就是踏实的放这,这个order呢,我这样整这呢,你看这不还是个闹嘛,是吧,我在下边咱们讲课的时候呢,是先讲的单立,后说的静。
07:25
这个静态代码块,那咱们现在复习嘛,静态代码块我这不就可以用了,我这写一个static的静态代码块,在这里面的话呢,我来一个CEE等于new order。这样写了,这样写完以后,那这里边是不是就没有必要去判断了,那就这么着呗,那你说这种这算是叫恶函式还是叫懒汉式啊,诶应该叫恶汉式,相当于你调一个方法的时候呢,是不是还是已经有了呀,或者换句话说呢,只是咱们说这个属性赋值的时候,没有显示赋在代码框中库了,但是你要执行的时候,咱们这个类加载这个静态代码块也马上就执行了,就是跟在这赋呢,其实有点像是吧,所以这个呢,我们把它呢,还认为这是一个叫恶汉式,这个我就放在这儿了,所以大家写的话呢,那你就写哪个都行,也没有太大区别,其实。
08:20
啊,这里也写个吧,二还是一。都还是二啊,没有太大区别,这个呢,仅仅呢是使用了一下这个静态代码块好哪还市还是呢,就我们说的这一个目前的这个懒汉市,咱们说它是一个线程不安全的,这呢就涉及到他们二者的一个比较。在这写的,那这就这样个情况,那还是从这个比如说笔试面试的角度来说,比如说笔试的时候呢,出了一道题,说写手写一个单立模式,什么也没说,那这时候呢,你写哪个对写二函式主要原因是什么呀?啊主要原因是简单啊,也也是简单是吧,主要原因的话呢,是因为这个,呃,它是一个线制安全的,没有任何问题啊,而这个懒汉式的话呢,它有限制安全问题,你要写的话呢,你得把这个安全问题得解决了,而且呢,这个限制安全后边我们会讲,一旦呢,你把它解决成个现车安全的话呢,它这个位置咱们需要在这,当然一个比较比较简单粗暴的一个方式呢,就直接我们在这个位置去加上一个S。
09:35
嗯,所以是RO啊,这个呢叫同步的,就是你加到这呢,它就线制安全了,加个这个这个关键字就OK了,但是这种效率稍微差一点,到时咱们讲课的时候呢,再写一个稍微效率高一些的,但是这个同步的这个问题是什么呢?就是它的这个,呃,多个线程过来执行呢,它这块这个效率呢就稍微差一些的。所以这块呢,我们就是如果默认没有说的话呢,大家呢,还是去用这个叫恶函式,那这样来写,那他要明确提了写什么模式呢,你再去写耦合模式就OK了,这是关于它二者的一个区别,行,那么课间的话呢,也有同学问这个问题啊,说老师能不能这样写,这样写的话算不算是一个单例呢?就比如说这个bank吧,Bank的话呢,大家看我直接在这new了,我这提供了一个方法,我要把这个方法呢干掉了,直接呢把这个属性呢,生成成个public了,说这这算不算单力呢。
10:29
那就相当于我在外边用的话呢,不是掉方法了,是不是直接半个点这个属性啊,对,那算不算单利,大家看定义上满满足吗?满足吧,这不在这就好了,我我我我第二个这个属性每每掉一次,他就扭一次啊。这晕了,确实有同学还晕了啊,这个我public了,就是把权限给改大了吗?权限改大了,然后我这块呢,我不是通过方法掉了,我直接通过这个类去调这个属性,我调一次incens放这一个,再调一个incense再放在这,你说我这两个去等等试试出吗?还真有同学懵了,说诶,我调下他,他就扭一下,我再调下他,他又扭一下,能那样整啊,那你要调这个方法的时候,你咋不每次都扭一下呢?这个属性这不是静态的嘛,是不是就直接一开始有这个类的时候就帮你加载好了,当时就拗过一次,后边呢,只是通过类去掉它呀。
11:36
外外边啊,你说外边我们在这个位置bank的时候呢,因为我这不已经加了啊,对对,说的这个问题是对的啊,就是我要是改成一个public的话呢,在这块我通过bank直接去调离ince,这个你要直接用没问题,但是有可能会担心的说你是不是可能给他重新扭一下,但重新拗的话呢,这块是不是我给他禁止了,说不能拗,但不能拗呢,你是不让我拗,那我可以等一个闹啊,这一说还有点意思啊,来写一下。
12:13
是我,嗯,再说一下这个,关于这个单例叫single to test,就还拿这个bank来说吧。你看啊,这个bug现在呢,我去私有化的构造器,就是目前呢,咱们写这个代码的话呢,没有涉及到这个类中的一些属性,就是你要该有属性还有属性该该这个通过构造器复值还复值,这没毛病啊,这个当然这个时候你构造器还有必造器,造多个重载的嘛,没必要了,你构造器造对象就造一个构造器用过一次你造多个重载的也没啥意思了,所以一般呢就一个构造器,那这时候呢,我直接呢生明一个public,叫static,然后呢叫bank instance,等于直接new一个bank,这么着写好了,没有提供这方法,这呢我说诶这就单立了,就这么着了,那这时候的话呢,我们说直接呢,通过这个bank点我去调了个ince,这呢相当于就获取了你唯一的这个对象了,这是一个了,然后再调一次,这个呢叫BANK2,这两个是一个吧,显然是一个,这没问题。
13:24
嗯,这个这都不用,不用去运行,这也知道他肯定是一个了,就是这时候的话呢,我们相当于用的都是唯一的这一个实例没有问题,那些同学可能会担心,你把这个权限放开了,说是不是有可能说我在外边呢,再重新给大家去new呢,这个事儿呢,你倒不用担心太多,我这写一个BANK3,然后呢,我想通过这个bank你去new new的话呢,权限也没有是吧。我这是不是一个私有的,私有的你肯定又牛不了了,但是呢,这个用户呢,他确实还可以干这个事,你这赋了个值,我现在还能调它,我调你的时候呢,我直接给你付个闹对吧,你这样整个闹的话呢,这这事就还真是变了,你把人家这个呢,好容易加载了一个结构,然后呢,哎,我找着闹,诶你去释放吧,他把这个new的对象给释放了。
14:14
是不是成这样了,也就是说呢,咱们呢,原来写的是private。咱原来写的叫private,对于一个属性来讲,它体现的其实两方面的操作,一方面呢叫做get,一方面呢叫做set,然后我们呢,是把它私有化了,提供了一个get,没有写set,就意味着这种只对外暴露的,这个是叫调用的这样的一个功能,你不能改,但是现在这种写法呢,咱们给它暴露出去了,调用和修改的功能俩都暴露出去了,那就这时候导致了用户是不是可能这种恶意操作就给你改了呀?啊那我怎么就不让他改了呢?咱们是不是讲了一个叫final保存一下啊,这个final的话呢,办啊这个这个跟这也没没没没啥关系了,你这个我也没有去操作它,相当于是是吧,嗯,对,我右边这样写的话呢,刚才也不对哈,刚才那样写的话也得是半个点incense,我刚才要做的话呢,也不能这么着做了,应该是让他呢复制个now。
15:20
就刚才你想演示把它这个值改的话,应该是这么着是吧?哎,那原来呢,你看这时候这是可以改的,改了以后呢,你要是再这样整一下,这就不对了,对吧?那那现在的话呢,咱们说我呢,为了不让你去改,我给你final一下,Final呢相当于不就把这个修改这个事呢给禁掉了嘛,那这时候呢,他就不让你去改了,那这时候你就别改了。那这算不算单利啊,算单利,就这呢也算单利,但是这时候呢,你你需要对这个代码的把控力要更强一些,除了用static去修饰之外呢,还得要加上一个final啊,这是这个这个情况了,就也可以啊,那另外的话呢,就是如果说你关于造这个对象的话呢,额外的还有其他的一些操作要做,我们这里边呢,就没有做什么了,直接就光return了一下,如果你关于这个属性啊,或者你这个造这个对象的时候,还有很多其他的代码比较丰富的,那你就可以呢在这个方法里边去写,而是而刚才这种写法呢,就比较简陋一些,就不能去写了,哎,就这个意思啊,行,这个呢大家清楚,后边呢,咱们还会讲一个叫枚举类,讲枚举类的话呢,其实咱们造这个类的对象呢,就是直接呢给他public了,就没有通过这个get方法就掉了,直接呢就声明了啊,那枚举类假如里边就只有一个对象,那其实就相当于是个单例的实现,哎讲到后边呢,我们再说。
我来说两句