-------android培训、java培训、期待与您交流! ----------
策略模式
策略模式就是根据对象的某些属性来操作某些数据时我们可以根据其属性来提供自己的操作策略!
策略模式的用法:
1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
2.需要使用一个算法的不同变体。
3.算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
4.一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。 将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。
下边的例子定义了一个猫类,要根据猫的某项属性来进行排序
//定义排序所需接口
package com.strategy;
public interface Comparable {
public int compareTo(Object o);
}
//定义猫类
package com.itcast.stragy;
public class Cat implements Comparable{
int height;
//在此处加的是什么比较器就可以实现怎么样的排序
private Comparator comparator=new CatHeightComparator();
public Comparator getComparator() {
return comparator;
}
public void setComparator(Comparator comparator) {
this.comparator = comparator;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
int weight;
public Cat(int height, int weight) {
super();
this.height = height;
this.weight = weight;
}
@Override
public int compareTo(Object o) {
// if(o instanceof Cat){
// Cat c=(Cat)o;
// if(this.height>c.height)return 1;
// else if(this.height==c.height)return 0;
// else return -1;
// }
// return -100;
Cat c=(Cat)o;
// 在此处使用上不定义的比较器在实现了comparable接口而实现的方法中进行比较
return comparator.compare(this, c);
}
public String toString(){
return height+"|"+weight;
}
}
//有时候用户会想要根据自己的需求按照自己的意愿根据某些属性进行排序操作所以定义一个///接口Comparator
package com.itcast.stragy;
public interface Comparator {
int compare(Object o1,Object o2);
}
//提供其实现类,在其中就可以根据自己的需求定义其实现方式
package com.itcast.stragy;
public class CatHeightComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
Cat c1=(Cat)o1;
Cat c2=(Cat)o2;
if(c2.weight>c1.weight)return 1;
else if(c2.weight==c1.weight)return 0;
else return -1;
}
}