策略模式

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


策略模式的結構

策略模式涉及到三個角色

環境角色:持有一個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;

}

}


}


環境類
package pattern.strategy;

public class Dog implements Comparable{

private int weight;
private int height;
//策略的引用,可以相互替換
//private Comparator comparator=new DogWeightComparator();
private Comparator comparator=new DogHeightComparator();

public int getWeight() {
return weight;
}

public void setWeight(int weight) {
this.weight = weight;
}

public int getHeight() {
return height;
}

public void setHeight(int height) {
this.height = height;
}

public int compareTo(Object o) {
return this.comparator.compare(this, o);
}
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章