策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。
1、需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,
2、2.1 设计另一个接口,专门封装算法;
2.2 设计一个抽象类(可有可无,属于辅助类),提供辅助函数。参考:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
一:代码举例:
1、实现一个接口可以比较即可;
package stragy.compare;
public interface Comparable<T> {
boolean compareTo(T obj);
}
2、定义一个cat类,继承该接口,即此【Cat类】通过年龄old比较大小;
package stragy.compare;
public class Cat implements Comparable<Cat>{
private String name;
private int old;
private int weight;
public Cat(String name,int old){
super();
this.name = name;
this.old = old;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getOld() {
return old;
}
public void setOld(int old) {
this.old = old;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
@Override
public boolean compareTo(Cat cat) {
if(this.old > cat.getOld()){
return true;
}
return false;
}
}
3、测试代码
package stragy.compare;
public class TestMain {
public static void main(String arg[]){
Cat cat1 = new Cat("Cat01",1);
cat1.setWeight(222);
Cat cat2 = new Cat("Cat02",2);
cat1.setWeight(200);
boolean b=cat1.compareTo(cat2);
System.out.println(b);
}
}
4、将【Cat类】中的比较方法单独抽离出来;
4.1 定义一个【Comparator】接口,如下:
package stragy.compare;
public interface Comparator<T> {
boolean comparator(T obj1,T obj2);
}
4.2 定一个【CatComparator类】实现如下,此实现按照 猫的体重来比较;
package stragy.compare;
public class CatComparator implements Comparator<Cat>{
@Override
public boolean comparator(Cat obj1, Cat obj2) {
if(obj1.getWeight()>obj2.getWeight()){
return true;
}
return false;
}
}
4.3 那么Cat类改为如下:
package stragy.compare;
public class Cat implements Comparable<Cat>{
private String name;
private int old;
private int weight;
private CatComparator comparator;
public Cat(String name,int old){
super();
this.name = name;
this.old = old;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getOld() {
return old;
}
public void setOld(int old) {
this.old = old;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
@Override
public boolean compareTo(Cat cat) {
// if(this.old > cat.getOld()){
// return true;
// }
// return false;
comparator = new CatComparator();
return comparator.comparator(this, cat);
}
}
4.4 测试不变。