前言
本人对于设计模式的学习,仅供参考!
一、Strategy策略模式
策略模式就是通过分别封装行为接口,实现算法族,超类中放行为接口对象在子类里面设定具体行为对象。简单来说,就是将算法与业务隔离开来,方便我们根据实际情况做出调整的模式。
策略模式使得算法可以在不收客户端影响的情况下发生变化,相当于可插入式的算法,可以使得在保持接口不变的情况下使具体算法可以互换
二、策略模式原则
其原则为:分离变化部分,封装接口,基于接口编程各种功能。此模式让行为变化独立于算法的使用者。
其用意为:针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得他们可以相互替换。
三、使用场景
策略模式最经典的使用场景莫过于利用Comparator实现排序。
以下为Comparator接口的内容(只保留了一个抽象方法,其他方法为default)
public interface MyComparator<T> {
int compare(T o1,T o2);
}
1.先做比较练习
如果要按长度比较字符串,可以定义一个实现Comparator<String>的类。
在这里当返回值为1时代表o1字符串长度大于o2字符串长度,当返回值为-1时则代表o2字符串长度大于o1字符串长度,当返回值为0则代表他们字符串长度相等。
public class LengthComparator implements MyComparator<String> {
@Override
public int compare(String o1, String o2) {
if(o1.length()>o2.length()) return 1;
else if (o1.length()>o2.length()) return -1;
return 0;
}
}
2.为一组对象排序
现有一个Person类如下:
public class Person {
//名称
private String name;
//身高 单位cm
private int height;