一:什么是策略模式?
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
如何解决:将这些算法封装成一个一个的类,任意地替换。
关键代码:实现同一个接口。
二:策略模式角色
环境角色:环境角色中持有一个关于策略角色的引用,根据传入的不同策略,执行不同的操作。
抽象策略角色:一个通用的接口,只是定义需要做什么操作,并不做具体操作。
具体策略角色:一个实现了抽象策略角色的类,提供具体的执行步骤。
三:实例
第一步:我想写一个方法对任意类型的数组进行排序,这个排序方法定义好之后,排序的这个方法我不想变动了,
定义一个接口
对于实现了这个接口的类,都可以调用第一张图片中sort方法进行排序,我这里定义了一个Cat类,实现了上述接口
第二步: 第一步中我们是根据Cat的身高比较大小,现在我们想根据体重比较大小,比较方式改变了,第一步就实现不了了,因为Cat类中只能实现一种排序,不能写多种排序,要想实现对于Cat类动态的规则进行排序,怎么做呢,首先肯定 离不开多态了。接下来就要讲策略模式了。
首先 定义一个接口Comparator,让子类实现这个接口,比较规则由子类决定,
这是一个比较规则: 根据Cat的身高比较大小
这是一个比较规则: 根据Cat的体重比较大小
之前在Cat类中,只是实现了一种比较规则,现在我们可以动态的指定比较规则,我们要实现哪种比较规则,只需要new 一个这个规则,