策略模式

策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。


策略模式的结构

策略模式涉及到三个角色

环境角色:持有一个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);
}
}


 

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