00:01
策略模式的注意事项和细节。策略模式的关键同学们可以看到我们在使用策略模式的关键地方,要分析出哪些是项目变化的部分,哪些是不变的部分,即变化的部分就是我们的策略,说说用的不同的算法,不变的部分呢就是我们的使用者。这个大家看出来,策略模式的核心思想是多用组合或者是聚合,少用继承。用行为类来组合,而不是用行为来继承啊,如果说我们继承的话呢,这个弹性就比较小。他因为他的耦合性很强嘛。那我们这个我们所说的策略模式呢,它体现出对修改关闭,对扩展开放的原则。客户端增加行为不需要去修改原来原来的代码,只需要添加一种策略就可以了,或者说添加一种行为,大家有发现是不是因为这种行为呢,我们是可以动态去添加的。
01:03
因此呢,它避免了让我们使用很多的这种像if else语句。同时呢,策略模式,它提供了可以替换继承。方关系的一种方法就是策略模式,将算法独立封在在封中,在他把这个算法呢封装在独立的。内中,使得你可以独立于其他contact来改变,使它易于切换,易于理解,易于扩展。前面大家看我们那个压制项目。我们讲的鸭子项目,那个鸭子项目里边呢,它的飞翔的行为,或者说他的叫声的行为,其实可以通过S方法来进行切换。是不是只要你实现了这种就说你实现了。这种方式,你实现了这种策略,那么我们就可以使用。但是呢,策略模式也有一个地方需要同学们注意。那就是每添加一个策略呢,我们就需要增加一个类。
02:03
当粗略过多。会导致我们内数目的庞大。这点呢,请同学们在使用中要注意,但是没有办法,因为还是那句话。你要解决的问题本身就是因为它有很多种实现的方式,或者有多种策略,那你这个策略类对应的策略的具体的类多,这是没办法避免的,只是我们在使用时候要注意,要一定要把我们的策略类把它写清楚,不要把它混在一起。这是我们在使用策略模式需要注意的,那下面呢,我们把策略模式讲的内容进行一个简单的梳理,我们来看一下。打开我们的笔记,对,打开我们笔记,我们来看看策略模式,我们式怎么去讲的OK。把策略模式放过来。那租赁模式讲解的顺序呢?跟我们前面讲其他模式其实几乎是一样的,先提出了一个问题,引起大家思考。
03:04
我们看一下。叫做一个分页符。策略模式。好的。我们先提出了这样一个问题,就是压制的问题。这有一个鸭子项目需要我们去解决,对不对?这样子的。具体的要求呢,有两个,我们有各种各样的鸭子,有些鸭子呢,每些鸭子呢,都有自己的行为要求显示鸭子的信息,我们现在使用的是传统的方案来解决,对,那传统方案呢,其实说白了就是用的继承。那么使用继承带来的问题。是显而易见的对吧,显而易见的,那么我们先把传统方式的类图给同学们。拿过来。就在这地方。同时呢,我们也针对画的这个图进行了代码的实现,具体来说代码的实现在哪里呢?在这个地方我们拿过来就行。
04:07
我们把这个包先拷贝过来。对,然后我们第一种解决方案,其实就是这个里面的,是这样子的吧,我们把第一个解决方案先拿过来。这个方案呢,其实是把问题解决了,只是呢,它的扩展性,还有它的规范性不是特别好。于是乎,我们提出了。传统解决方法的带来的问题,我们做了一些分析。传统方法带来的问题呢,是有这么几点。做了一个整理,看一下。给他标一个号啊。标一个号就可以了。放到这儿。主要的问题是什么呢?就是从这地方看到,就说我们要去覆盖,可是覆盖的情况下,假如有很多,比如说我们有一种玩具鸭子。
05:01
它呢,它从腹内大继承下来的方法,我们全部都要去,就是说这个大,嗯to大呢,要去覆盖大所有的实验方法,那这样子呢,就对我们。带来的很多困扰。也就是说,如果说我们有一个方案。可以失去动态的把一个类。去跟他的一个操作结合起来。这是最好的,于是我们就提出了叫策略模式。提出了策略模式,提出策略模式以后呢,我们就对策略模式做了一个基本的介绍。做了基本的介绍,具体来说就这样子的两点哈,话不多,但是呢。把策略模式的核心就点出来了。哪点呢?同学们可以看到它的核心思想是这么几个。它定义算法组,这个你也可以理解成是什么呢?就是策略,策略组。
06:01
处理。有一组策略。然后他们之间可以相互的替换。然后呢,此模式让算法的变化独立于使用算法的变化和算使用算法的客户把它分开。就算法是一部分,那么算法的使用者是另外。是另外一条线。这样子呢,就把策略模式它的精髓之处点出来了。同时呢,这一个策略模式也体现出它的一些好处。对吧?这是策略模式的介绍,紧接着我们画了一个策略模式的原理类图,加深对它的理解。好,内图呢,在哪里?内图其实就是在幻灯片,我们直接把它拿过来看一下就可以了,后面呢,我这里总结了几句话。对,总结几句话大家知道就可以哈,然后既然我们对策略模式有了了解,我们就用策略模式来解决了压值的问题。
07:03
啊,我们来看看是怎么解决的。一定要有代码,我们才能把它理解的到位。怎么解决呢?首先我们说了一下应用模式的要求。把要求说清楚。紧接着我们做了类图的分析。然后呢,做了代码的实现。我们现在需要把类图粘过来,类图在哪里呢?大在这,诶你看这里面这个类图呢,就把就把我们想表达的这种设计理念。说出来了。好,这是我们的类图放到这一栏,代码实现呢,其实就是刚才在这里面写的improve。文件夹里边。我把improve文件夹呢,也给同学们拷贝到这边来即可,非常简单哈,最后为了加深对大家认识呢,我们说在我们JDK的origin这个工具里面呢,其实它也用到了什么呀,它也用到了我们的。策略模式。这个呢,我们就对源码进行了一个剖析。
08:02
放到这边就可以好,然后这边说了两点。源码的追踪呢,我直接就就从幻灯片这边把它拿过来就行,其实这个图已经把它说的比较清楚了,也就是说我们这个呢,就是我们可以叶程是策略接口,而这边我们用了匿名类的方式对我们策略接口进行实现,也可以理解成new computer,就是我们的一个策略对象。当然具体来说方法就在这里面进行改修改就行了。好,这是我们的。这一个源码最终最后呢,源代码也给大家拷贝拷贝过来,这个源码里面呢,我们把它的一些具体的东西写到这了。好的,我把源码给大家拿过来。代码。好的,把代码呢,放在我们的一个表格中对不对,加深一个对它的认识,最后我们也说了策略模式的它的一个细节吧,就是同学们注意注意到他的一些细节就OK了。
09:01
呃,有,有优点也有缺点,但是呢,总体来说还是优点,它的优越性大于它给我们带来的一些一些问题是吧,这个类多几个不是大的问题啊,就是在开发中我多了几个类,但是我带来了带来了什么,带来了对程序结构的一个清晰,这个是值当的。所以说这个也不算是他的缺点,只是同学们需要注意一下就可以了,就是我们每添加一个策略呢,就增加一个类,其实它是符合我们单一原则的。没有什么问题,那同学们关于策略模式的讲解呢,我们就给大家聊到这里。
我来说两句