00:00
下面看一下合成复用原则。合成复用原则,其实它的核心思想啊,就一句话就可以把它说清楚了,就是它的原则是尽量使用合成或者是叫聚合的方式,而不是使用继承。这这一句话就说我们能够使用合成或者是聚合的方式,就不要使用继承,那问题来了。同学们可能对继承是比较理解的,那么什么叫做聚合,什么叫合成呢?其实这这一块的内容呢,它是属于我们UML类图的,也就是说关于。这个聚合和合成的概念,我在这个后面讲UML图的时候,我会详细的介绍。我会给大家讲依赖泛化实现关联聚合和组合,这里面还有很多图我都会跟大家讲到,但但是啊,但是因为我这个优美类图呢,我是后面讲,所以说这一块,呃,这一块呢,我就先先暂时不系统,先暂时不给大家说这个聚合和合成的,呃,一一个这个详细的概念,我我就举一个例子,先让大家对它有一个了解,好吧。
01:13
因为我们听这个课程的同学,有些他其实是学过内图的,我这一说合成和聚合他一下就知道了,但不排除有一部分同学还没有学,我们对这句话做一个了解吧,做一个做一个案例。嗯,做一个这个类图,给大家做一个介绍,什么叫做尽量使用合成或者聚合的方式,而不使用继承呢?来看一个简单的示意图,比方说。比方说我这儿有一个类图,有一个类图,我这儿还是建一个包吧。还是建一个包?因为这这个概念它是比较好理解的。我们就用这个来写,叫compose。Composer。那么我画一个类图,大家理解一下就可以了,来,走一个。
02:00
我画一类图。这类图好吧。我这来。好,假如现在我有这么一个需求,同学们注意听。我有一个A类。我有一个A类。OK。我有一个B类。我有一个壁垒。现在呢,我有这么一个需求。我希望这个A,我希望这个B类能够用到A类的方法,比如说这个A类里面有两个方法。有两个方法,注意听讲啊,就说我希望这个B类能够用A类的两个方法,请问你有几个方案?其实最容易想到的是,不是你让这个B去继承我们这个A就完事了。是不是这是一个方案?没问题吧,因为我B继承了A,我就可以使用A里面的OPERATION1和OPERATION2,这个是没问题的。但是同学们想,如果你仅仅是希望让B去用A的方法。
03:03
而没有其他的,它两者之间本身就没有那么密切的关系,你这样做就不合适了,那么听我这解释哈,注意听。如果,如果我们只是。只是让让这个B类。B类去去使用A类的方法,A类方法,那么使用继承,使用继承,继承就会让。让谁呢?让B和A的这个耦合性。耦合,耦合性增强很很强,耦合性增强。啊说老师,那这个肯定是这样子的呀,你看我们如果是。按照这种方式来玩儿。对吧,诶我们搁到这儿吧,搁这儿。啊,你如果只你只是希望这个B类去用A类的方法使用继承,会让B和A的耦合性增强,因为你是继承说说如果我们这个A,它又增加了一个新的方法,打个比方。
04:11
增加一些方法,其实你这个币并不想去用它的第三个方法,你也没办法,你也继承下来了。这是一点第二点。如果这个A类还有其他的类。被继承了,那A类一旦方法改变,你也会影响B,所以这种这种耦合性是很强的,因此呢。我们还有一种方案。既能够让B用到A的。相关的方法,而且能让它的耦合性降低,什么方法呢?可以这样子去做来看。我还是复制一份。这仍然是这个A类哈,我们再来一个B类。我怎么做呢?我用这种方式,第一种我可以用简单的依赖。我就用你就可以了,那我怎么用呢?我在这个B里面,我用一个方法让这个A传进来就可以了,说这是一种方案,注听比如说我这样写,我要用它。
05:09
我要用它,我在这个地方怎么办呢?OK,好,我在这儿有一个类型,比如说A。A传进来就可以了,是不是我仍然可以让B类去用到A类的123这种方法,因为我可以传一个。A的对象实力传进来是不是这这个也是可以的,这个就叫。依赖。除了这种方式,我们还有还有一种方式呢,同学注意听哈,注意听,不着急。不着急哈,呃,我再复制一份。还是这个A类。还是这个A类,然后呢,我还有一个B类。我怎么用呢,我这样用注意听哈,注意听我怎么写呢,诶大家看我加一个属性。加个属性,这个属性呢。它就直接是A的一个对象实例。
06:00
可不可以?哎,你看这样子可以吧,那么我再通过set方法,比如说我在这里面还有一个set方法了。打比方,我这有个set方法,我让比如说就是set a。打个比方啊,Set a。Set a,然后这边呢,我把这个A给我穿进来。那这样子。B和A的关系就称之为什么呢?就称之为把A聚合到我这个B里面去。这个就叫聚合。也就是说这种方式我们认为耦合性太强了,我就换成了这种依赖或者是聚合,这个聚合就是刚才同学们看到这个这个词聚合合成就是有有点类似于这种依赖,还有一种,还有一种就是什么呢?还有一种写法是这样写的。我仍然有一个A类。还是这个A类。好,我我往这边稍微移动一下,同学们。
07:00
这边空间有点小了哈。我诶,我还有个壁垒。我还有一个B类。那么这个B类我怎么用呢?我这样写,我加一个属性。我直接这样写的。来走一个属性,我们仍然是A,类型也仍然是A。对,然后我这儿直接六。就是在构建这个属性的时候,直接就溜出来了。来看。就那当然这种关系就是当我这个A类,当我这个B对象,当我B的一个对象实例。创建好的时候,我的这个属性也就创建好了。那么这样A和B的关系就构成什么呢?构就构成了组合的关系,就这样子相当于把A组合到。我这个地里面去了。也这就是我们所说的这三种方式来替代。我们的这个继承,也也就是说这种关系太强了,我就换成了要么是这种依赖,要么是这种聚合,要么是一种组合关系,这就是我们这儿讲的这个概念什么呢?就是尽量使用合成或者聚合的方式,而不是使用继承方式,当然了,嗯,因为我这里,呃,后面我们还会想讲这个关系是怎么来的,所以后面我我还会再提这个。
08:24
提这个就是这这个类之间的关系,还会讲右边类图,还会说这里呢,我们先。把这个概念先给大家聊清楚。好,我把这个类图给同学们放置到这里,没问题吧,同学们。好就放到这就可以了,然后呢,还有一点同学们看,最后我们再做一个小结,设设计原则的核心思想是什么?设计原则的核心思想,其实总结起来我们讲了七个原则,总结起来就是这么三点,找出应用中可能需要变化的地方,把它独立出来。
09:00
不要和那些不需要变化的混在一起。就要抽取,这样就可以达到复用。第二个我们尽量接对针对接口编程,而不是对针对实现编程。我们都在接口编程。不是具体的实现,那么为了为了交互对象之间的松耦合性设计而努力,就说我们这么多的原则,不管是单一职责原则,还是迪米特法则,对吧?还是我们前面讲的组合这种原则,还是我们前面讲的OCP原则,其实都在围绕一种什么?都在解决一个什么核心的问题,就是解决这个收耦松耦合,耦合性的问题,就是我们尽量让我们的代码是一种松松耦合,松耦合的这么一种方式。好,那么关于这这个内容呢,我们就先聊到这儿,我就直接给大家把代码整理一下哈,呃,不把我们这块内容整理一下,我们第七个设计原则就是合成复用原则,合成复用原则我这里呢介绍的比较简单,因为它本身也比较好理解。
10:05
OK,基本介绍。那这里呢,有一个类图也给大家拿过来,这个是图,我画了一个图。解释了一下什么叫做尽量不要使用继承,而是使用。合成或或者是组合的方式,就这就尽量不要用这种方式,而是用这个,因为上面这种呢,是EA的关系,下面是hands hands,呃,就是有一个啊,当然你如果确确实实需要继承,那再说你比如说我,我刚才讲的,如果我只是为了用它里面的方法,我没有必要一定去继承他嘛,对吧,好OK。然后这边我们还整理了一点关于设计。原则设计原则的核心思想是怎么样子的?来聊到这里。设计设计原则的这几个原则的核心思想。其实。这就是围绕我们这个解决代码的,或者是我们代解决我们这个设计的松耦合性而努力。
11:06
就是一直都都是在围绕解决松偶和性。展开的,好吧,OK,同学们,关于这一个内容,我们就先。聊到这里,就先聊到这里。
我来说两句