策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。
策略模式的结构
策略模式涉及到三个角色
环境角色:持有一个Stratcgy类(策略类)的引用(此处为Dog类),
抽象策略角色:策略类,通常有一个接口或者抽象类实现(此处为Comparator)
具体策略角色:包装了相关的算法和行为(此处为DogHeightComparator和DogWeightComparator)
接口
package pattern.strategy;
//定义策略接口
//Dog使用这个接口来调用某Comparator定义的算法
public interface Comparator {
//定义一组算法
public int compare(Object o1, Object o2);
}
实现类一
package pattern.strategy;
//实现策略接口
public class DogHeightComparator implements Comparator {
//算法一
public int compare(Object o1, Object o2) {
Dog d1=(Dog)o1;
Dog d2=(Dog)o2;
if(d1.getHeight()>d2.getHeight()){
return 1;
}else if(d2.getHeight()<d2.getHeight()){
return -1;
}else{
return 0;
}
}
}
实现类二
package pattern.strategy;
//实现策略接口
public class DogWeightComparator implements Comparator {
//策略二
public int compare(Object o1, Object o2) {
Dog d1=(Dog)o1;
Dog d2=(Dog)o2;
if(d1.getWeight()>d2.getWeight()){
return 1;
}else if(d2.getWeight()<d2.getWeight()){
return -1;
}else{
return 0;
}
}
}