策略模式:策略模式針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。策略模式使得算法可以在不影響到客戶端的情況下發生變化。策略模式把行爲和環境分開。環境類負責維持和查詢行爲類,各種算法在具體的策略類中提供。由於算法和環境獨立開來,算法的增減,修改都不會影響到環境和客戶端。
策略模式的結構
策略模式涉及到三個角色
環境角色:持有一個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;
}
}
}