00:00
我们来看一下。设计模式的下一个内容叫做设计模式的七大原则,那么对于这七大原则呢,我们一一展开这个讲解,我们首先要给大家简单的说设计模式的目的,前面其实已经说过了,就说我们讲这个设计模式,它为什么呃要出现这么多设计模式呢?就是因为在我们软件编程中,实际上我们程序员一直在。考虑这样一些问题,就是怎么去解决耦合性,怎么提高我们的内聚性,以及让我们的软件。能够具有更好的维护性、扩展性、重用性和灵活性,对不对?那么我们设计模式其实就是要解决这样的问题。换言之,使用了设计模式,我们就可以让我们程序松耦和高内聚,维护性、扩展性、重用性、灵活,灵活性要提高,但是问题来了。
01:03
什么问题呢?就是说。我们设计模式是为了解决这样的问题。那我问大家一个问题,你设计模式这样去设计的。原则是什么?换言之,就是说你比如说你设计了一个工厂模式。你出现一个桥接模式或者解释器模式,那别人就要问你,你这个设计模式设计的原则是什么,大家明白我要说什么,说你你给我,你你在讲一个工厂模式,那么工厂模式为什么它是这样去设计的呢?这里面就涉及到一个问题,就是我们设计模式本身需要遵守的七个原则。哪七个原则呢?好,刚才老师已经讲过了,我们软程序要提高的是代码的重用性。可读性、可扩展性和可靠性,目的是要呈现高内聚、低耦合。
02:01
对,那么我们要让程序具有这样的特性,我们要面临的,我们要遵守七个原则分别是什么呢?这几个原则单一职责。接口隔离依赖倒转,也叫有些地方叫做转倒,倒那个倒置。啊,这样写的,它不叫倒转,叫倒置。这样的一一个意思,还有就是理斯替换开地原则,迪米特法则,合成复用原则,这个是我们去设计设计模式的原则,是不是有点有点绕啊?就说你你的那些23种设计模式,之所以这样设计,其实你要遵守的原则是这七大原则。那么回到刚才我讲的这个软件使用设计模式的目的,其实就这主要就这这五个,那么我们简单再阐述一下什么叫做代码重用性,我再做一点通俗易懂的解释,急急,什么样呢?就是说。
03:04
相同功能的,相同功能的代码,相同功能的代码怎么样呢?不,不用重写,不用多次编写。这个就叫代码的重用性很好,你不要你你这个代码不要说,诶我有一段功能,结果呢,这段功能相似,但是我我写了很多遍,这个就说明你的代码的重用性不高,什么叫可读性呢?注意听这个可读性其实就是我们编程的一个规范性。其实设计模式也在提高。我们的。规范性,为什么呢?因为你的规范性好了,这样干什么呢?便于它,就于其他。其他程序员的阅读。阅阅读和理解是这意思吧。就是说,如果我们每一个人。
04:02
去写一段代码。都是不一样的方式,都是不同的规范,那你想这个代码可读性肯定是不高的。可能就是你自己能看懂,别人就看不懂了。所以说可读性其实就是规范性的另外一种说法,你的代码规范了,大家都按这个套路出牌。显然我们程序员阅读起来就比较容易,是不是好?我们再说扩展性。什么叫做扩展性呢?及。急什么呀。当需要。增加新的功能时非常的方便。非常的方便,成本低,什么意思呢?就是说假如我这一段代码我已经可以用了,但是需求。增加了一个新的功能。我们在新需求要求我们增加一个新的功能,而我们增加这个新的功能呢,增加增加的时候非常方便。这个就叫可扩展性,有些人把这个可扩展性呢,也称之为,称为什么呢,称为可维护性。
05:09
啊,有些人是这么说,叫可维护。就这意思。那么什么叫可靠性呢?我们再来聊一聊,这个话题也是很重要的,大家还记不记得我在前面讲过大厦和简易房的区别?什么叫可靠性。理解一下就是当。当我们增加新的功能后,对原有的原来的这个功能没有影响。就说你千万不要。搞了这样一段,写了这么一段程序,就是当你新增加一个功能,或者减少一个功能过后,你会发现原先正常可以工作的功能怎么样,不行了,不能用了,这个就叫可靠性不高。什么叫可靠性高呢?就说我们增加一个新的功能过后,我们对原有的功能很难造成影响。
06:03
大家明白我的意思吧,就是说你增加新的功能,跟原先的功能并一个耦合性是很低的,那自然你对原有的功能呢,就没有什么影响,这个就叫可靠性高,而我们前面说的重用性、可读性、可扩展性、可靠性,其实根本的目的就是要让我们写的程序或者是软件对外呈现一种高类聚。低耦合的特性。明白我的意思吧,所谓什么叫高内聚呢?就是我们模块。内部它是非常紧密的,但是模块和模块之间,或者说功能和功能之间,它是低耦合的,相相他们之间的这个耦合性很低,也就是说这么说吧,假如你写了一个功能A这个功能模块,还有一个功能B这个功能模块。那么这两者之间,他们的依赖性是很低的。
07:01
依赖性是很低的,这样呢我们就能做到do,就说你的A模块如果出了问题呢,不会你A模块如果出了问题,尽量这个错误就在A模块报出来,不要把A的错误带到B去。明白我的意思吧。好的,那这就这个就叫高类聚低耦合,后边呢,我们在写代码的时候,它会反复的阐述这两者的概念,我们这里给大家分析,呃,给大家这个分享一个金句叫分享。两句话大家理解一下设计模式,它包含了面向对象的精髓,所以说有人说过这样一句话。说这样一句话,什么话呢?懂了设计模式,你就懂了面向对象分析和设计的精妙。这句话大家能理解吗?就说我们学完面向对象,我们知道面向对象有三大特性,继承、封装和多肽。我们也知道面向接口编程,大家知不知道你在学面向对象的时候,虽然你学了这些特性,但是这些特性最终是要体现在设计模式的。
08:10
也就是说,你把设计模式真正的搞懂,搞明白了,你才能真正理解面向对象分析和设计的精髓之处。因为你灵活的应用了吗?大家还记不记得我前面讲过,面向对象的再高一个城市就是功能模块,而功能模块里面用到很多设计模式,设计模式其实是要基于我们面向对象这种这种特性的编程特性的。好,还有一句话呢,就是这个哥们说的,这个哥们呢,是写了一本书,写的非常到位的,叫effective高效的C加加这本书,他在这个书里面他说了一句话。这句话呢,我们也分享一把,他说C加加的老手和C加加的新手,区别就是在于前者手上有很多的伤疤。怎么理解这句话?也就是说,如果你是一个C加加的老手,你的脑上,你的手上其实有很多伤疤。
09:06
这句话就告诉我们。一个程序员的成长,其实他是吃了很多亏,走了很多弯路才慢慢成长起来的,明白我的意思吧,就是说他肯定是已经踩了很多坑了。他慢慢成长起来哦,发现应该这么去写代码才是最好的。而对我一个新手来讲呢,可能他没有这些伤痕,是因为他还没有碰到过这些坑。当他碰到这个坑过后,他掉到一个坑里面去,又爬起来了,掉到一个坑里面去又爬起来了,好慢慢慢慢他就成长了,在这成长的过程中,他就会留下很多伤疤,所以你看一个优秀的拳击选手,一个优秀的程序员,你把他的手一打,手或者是脚啊,他一定是受了很多伤的。大家认同这个观点吗?比如说你是一个优秀的这一个体操运动员,你放心,他一定是身上伤痕累累,如果这个人身上一点生都没有收到,然后他还是一个世界,世界冠军我觉得是很少的,就跟我们写编程一样,你是一个优秀的程序员,你一定是踩过很多坑,吃过很多亏的,那么这个人说的这句话其实就把。
10:15
我们程序员的成长说出来它的一个过程,好,这是设计模式的一个目的,那么下边呢,我们就来看设计模式的七大原则的第一个原则。大家看啊,我们设计模式的原则,它是设计模式为什么这样去设计的依据,也就是说是设计模式的依据。明白啊,有七大原则,刚才我已经念了,我就不再念一遍了,我们直接讲单一职责原则来跑一个。首先我们来看看单一值的,它是一个什么样的概念,换一个画笔,换成红色的。大家先看单一职责的基本介绍,他说,对类来说,即一个类应该只负责一项职责。
11:04
就你一个类呢,就管一件事。大致就是这个意思,比如说同学们学过,学过像这个DAO,学过这个这种类吧,比如叫U。User DA。大家知道user DAO,它往往只是管。跟我们UR表的一个增删凯查相关的,这个就叫单一职责明白,那么如果一个类A就是有一个A这样一个类,它负责两个不同的职责,比如职责一,职责二是两个不同的,那么当职责一的需求变更的时候,有可能改变这个A,对吧,因为你。职责变化了吗?有可能对我们A类发生一个变化。可能在你变化职责一的时候呢,会造成职责二这个执行错误,比如说你职责一里面用到了职责二,或者职责二用到了职责一。那两个又是不相同的,那么可能你改变职责一对我们职责二呢也会有影响。
12:06
那么这个就违反了我们单一职责原则。因此,在这种情况下呢,我们的设计原则就要告诉我们,应当将A的力度分解为两个,一个叫A1,一个叫A2。说说的再直接一点,就是把这个A类分成A1这个类和A2这个类。这样子是不是就很清晰了?啊,就把它的,因为它他负责两个不同的职责,那你干脆把这个A1和A2分开,比如说你有一个DAO,这个DAO又在操作user表。诶,他还操作了什么表呢,Orderder表就是订单这个表,那这个时候我们这个DAO它既负责uder表的增删改查,又负责order表的增删改查,那你这个就违反了单一职责原则。这个时候你又应该干什么呢?把这个DAO分成两个部分,一个叫UDAO,一个叫order DAO,就这个意思是不是很简单呀?好,那我们明白了单一职责原则的一个基本概念,过后呢,我们用案例来给同学们再实际的演示一遍。
13:17
那关于应用案例呢?我们在下一个视频为大家进行讲解。
我来说两句